2012-01-23 6 views
3

.on() api of jQuery의 기능을 오해했을 수도 있습니다. 요소가 생성 된 후API에 jQuery가 자동으로 바인딩되지 않습니다

<a class="btn" href="#">foo</a> 
<a href="#" class="new">New</a> 

<script> 
    $(function(){ 
     $("a.btn").on("click", function(){ 
      alert("foo"); 
     }); 
     $("a.new").click(function(){ 
      $("html").append($("<a/>").attr("class", "btn").attr("href", "#").text("bar")); 
     }); 
    }); 
</script> 

나는 새로운 a.btn 요소를 생성

http://jsfiddle.net/tugberk/Um9VE/이, 이벤트가 자동으로 연결되지 않은 : 여기에 내가 시도하고있는 코드입니다. 나는 새로운 버튼을 만든 후 그것을 트리거하여 쉽게 .bind() api로 이것을 달성 할 수 있지만, 내 친구 중 한 명은 .on() 이벤트가 자동으로이 작업을 수행한다고 제안했습니다.

그래서 .on() api의 기능을 오해 했습니까?

+0

당신은 .live 사용하여이를 달성 할 수있다() - 나는 CSTE 연구진은()는 내 대답은 아래를 보면 @MonkeyCoder 기존의 요소 – MonkeyCoder

+1

사용할 수 있습니다 생각합니다. .on() bind, live 및 delegate의 모든 변형을 처리합니다. –

+0

@MonkeyCoder live는 더 이상 사용되지 않습니다. – tugberk

답변

4

.on().delegate() 또는 .live()처럼 작동하려면 특수 구문이 필요합니다. .on()/.off()을 사용할 수있는 여러 가지 방법과 .bind()/.live().delegate()과 함께 .undelegate().die()을 함께 표시하는 방법이 있습니다.

$('a').bind('click', myHandler); 
$('a').on('click', myHandler); 

$('form').bind('submit', { val: 42 }, fn); 
$('form').on('submit', { val: 42 }, fn); 

$(window).unbind('scroll.myPlugin'); 
$(window).off('scroll.myPlugin'); 

$('.comment').delegate('a.add', 'click', addNew); 
$('.comment').on('click', 'a.add', addNew); 

$('.dialog').undelegate('a', 'click.myDlg'); 
$('.dialog').off('click.myDlg', 'a'); 

$('a').live('click', fn); 
$(document).on('click', 'a', fn); 

$('a').die('click'); 
$(document).off('click', 'a'); 
+0

니스! 이제 예상대로 작동합니다. http://jsfiddle.net/tugberk/Um9VE/5/ 감사합니다! – tugberk

+0

좋아요! 당신이 실제 답변으로 표시했다면 고맙겠습니다;) –

+0

나는 그것을 허용하지 않을 것입니다 :) 특정 시간이 지나야합니다 :) – tugberk

관련 문제