2014-01-21 5 views
-2

어떻게 동적으로 생성 된 요소에 이벤트 수신기를 제공합니까? 아래 예제에서이 코드가 모두 실행되면 term_num 변수가 하나씩 (term_num ++) 증가하므로 #abtn click 이벤트가 호출 될 때마다 새로운 div 요소 "term_ [term_num]"이 만들어집니다. 이 새로운 div 각각에 클릭 이벤트 리스너를 어떻게 제공합니까?동적으로 생성 된 요소에 대한 이벤트 수신기

$(document).ready(function() { 
$("#abtn").click(function(event) { 
     var newterm = '<div id=\'term_'+term_num+'\'>'+term+' </div>'; 
     var term = document.getElementById("term_input").value; 
     $('#terms').after(newterm); 
+0

대신 클래스를 사용하고 대표단에게의 –

+0

가능한 중복 사용하여 이벤트를 결합하는 것이 더있을 것 [이벤트가 동적으로 생성 된 요소에 바인딩?] (http://stackoverflow.com/questions/203198/event-binding- 동적으로 생성 된 요소) –

+0

답변을 평가하는 경우 투표 화살표 아래에있는 답변의 왼쪽에있는 체크 표시를 클릭하여 가장 좋은 것을 '수락'하는 것을 잊지 마십시오. 이것은 또한 당신에게 몇 가지 평판 포인트를 부여합니다! 나중에 더 나은 대답이 나온다면 그 대답으로 전환 할 수 있습니다. SO 둘러보기를 수행하지 않았다면 여기에서 확인하십시오 : http://stackoverflow.com/tour – m59

답변

2

당신은 .on()와 사전에 등록 할 수 있습니다 직접 기능 Live demo (click).

$(document).on('click', 'some-selector', function() { 

}); 

를하거나 추가하기 전에 DOM 요소 newTerm를 작성하고 첨부 : Live demo (click).

var $newTerm = $(newTerm); 

$newTerm.click(function() { 

}); 

S 요소에 추가하는 선택기가 동적 ID이므로 여기에서 두 번째 방법을 사용하는 것이 좋습니다. .on을 위임 할 수 있도록 생성 된 요소에 클래스를 추가하려면 .on을 사용하십시오. 더 효율적입니다.

+0

+1 솔루션은 있지만 위임은 바인드하지 않아도됩니다. 수백 개의 동일한 핸들러를 사용합니다. –

+0

@ A.Wolff 좋은 점, 나는 그것을 업데이트했다. – m59

1

클래스를 생성하는 동안 클래스를 추가하십시오.

var newterm = '<div class="termsDiv" id=\'term_'+term_num+'\'>'+term+' </div>'; 

동적으로 요소를 만들려면 Event Delegation을 사용해야합니다. 위임 이벤트 방식을 사용하여 .on()을 사용해야합니다.

$(document).on('event', 'selector', callback_function) 

$(document).on('click', '.termsDiv', function(){ 
    //Your code 
    alert("clicked me"); 
}); 

document 대신에 당신이 가장 가까운 정적 컨테이너를 사용해야합니다.

당신이 위임 된 사건들이 나중에 문서에 추가되는 하위 요소의 이벤트를 처리 할 수있는 장점이 Attribute Starts With Selector [name^="value"]

$(document).on('click', 'div[id^="term_"]', function(){ 
    //Your code 
    alert("clicked me"); 
}); 

을 사용할 수 원하는 경우. 위임 된 이벤트 핸들러가 첨부 된 시간에 존재하도록 보장 된 요소를 선택하면 위임 된 이벤트를 사용하여 click 이벤트를 동적으로 생성 된 요소에 바인딩하고 자주 이벤트 핸들러를 첨부 및 제거하지 않아도됩니다.

관련 문제