2013-01-16 3 views
0

가능한 중복 :
Dynamically Adding Elements and trying to use the selectors .click event JqueryClick 이벤트

$(function(){ 
    $('a.bar').click(function(){ 
    // do something 
    }); 

    $('a.foo').click(function(){ 
    $('#toto').append('<a class="bar">bar</a>'); 
    }); 
}); 


<a class="foo">foo</a> 
<div id="toto"></div> 

어떻게 자동으로 DOM 요소에 대한 준비가 JQuery와에 정의 된 클릭 이벤트를 부착 (예 : a.bar의 경우 a.foo을 클릭하여) 다른 이벤트에 의해 추가 되었습니까? 당신이 필요로하는 무엇

답변

1

이 위임 된 이벤트의 기술이다 .. 당신은 모든 트리거를 설정하고 DOM 수정 후를 부르는 init() 기능을 만들 수 .on

$(document).on('click', 'a.bar', function(){ 
    // do something 
}); 
+0

$ (문서)가 '준비'외부에 있어야합니까? – JohnJohnGa

0

를 사용하여 아래를 참조하십시오. 예컨대 :

$(function() { 
    init(); 

    $('a.foo').click(function(){ 
    $('#toto').append('<a class="bar">bar</a>'); 
    init(); 
    }); 
}); 

function init() { 
    $('a.bar').click(function(){ 
    // do something 
    }); 
} 
+0

그게 내가 피하기 원하는거야 – JohnJohnGa

+0

첫 번째 클릭 괜찮을거야 ..하지만 다음 번 클릭은 이미 처리기를 가진 모든'.bar'에 대한 처리기를 바인딩 할 것입니다 –

+0

베가 : 사실,하지만 당신은'$ ('a.bar'). data ('events')'또는 이전에'click' 이벤트의 바인드를 해제하는 것입니다. 내 대답은 힌트 일 뿐이며 완전한 코드는 아닙니다. – Jules

0
$(document).ready(function(){ 
    $('.foo').click(function(){ 
    $('<a class="bar">bar</a>').appendTo('#toto'); 
    }); 

    $('#toto').delegate('.bar', 'click', function(a){ 
    $('.foo').toggle();  
    }); 
}); 

사용 위임.