2010-03-17 3 views
5

내가 이런 리스너를 생성 :jQuery를 리스너 동적

제 문제는 청취자가 동적으로 생성 된 요소를 "듣지"않는다는 것입니다.

누구든지 약간의 빛을 비추 수 있습니까?

답변

13

이벤트 처리기를 바인딩 할 때 존재했던 요소에서만 수신 대기합니다. 동적으로 생성 된 요소를 듣고 싶다면 live() 함수를 사용하면됩니다.이 함수는 현재 및 미래의 요소와 함께 작동합니다.

편집 : jQuery를 1.7로, 권장되는 방법은 이벤트 핸들러를 연결에 필요한 모든 기능을 제공하여 .bind(), .live().delegate()를 대체 .on() 기능을 사용하는 것입니다.

+0

빛나는 감사합니다. – Luca

+1

감사. 내 경우에는 다음과 같이 문서 요소에 이벤트를 추가해야했다. '$ (document) .on ('click ','mybutton ', function() {// handler}); – gerrytan

0

확실히.

동적 수신기가 동적이지 않습니다.

$('.delete').click(function() { 

은 모든 기존 요소에 리스너를 연결합니다.

다른 요소를 추가 할 때 새 요소에 동일한 처리기가 연결되도록하려면 다시 요소를 다시 실행해야합니다. 기본적으로, 새로운 요소는 당신이 그들에게 새로운 핸들러를 연결 해달라고 때문에 듣고 얻을 해달라고

)

1

네, JQuery와 라이브 기능을 확인하십시오. 이벤트를 바인드하고 바인드 해제하는 것을 잊지 마십시오. 링크가 생성 될 때마다 링크가 계속 바운드되는 문제가 있었지만 페이지가 링크를 다시로드하지 않아서 5 ~ 6 회의 클릭 이벤트가 연결되어 문제가 발생했습니다. 링크에 대한 이벤트의 바인딩을 해제해야했습니다.

3

아직 존재하지 않는 요소에 이벤트를 바인딩하는 것은 불가능합니다. 요구르트를 현명하게 표현한 것처럼 이것을 달성 할 수있는 방법은 'on'을 사용하고 함수의 두 번째 매개 변수로 사용할 선택자를 지정하는 것입니다.

this.$someStaticParent.on('click', 'li', functionName); 

이것은 무엇을하는지, 부모 요소에게 클릭 이벤트를 보류하도록 지시합니다. 클릭 할 때마다 이벤트가 발생한 곳을 확인하고 매개 변수 2와 일치하면 이벤트를 발생시킵니다. 이를 이벤트 위임이라고합니다. 부모가 이벤트를 승인 한 다음 성공적으로 비교하면 이벤트를 시작합니다. 이것은 일반적인 디자인 패턴입니다.

관련 문제