2011-09-28 1 views
1

에 요소를 추가합니다.동적 나는 jQuery 플러그인의 요소를 만들 jQuery를

내가 그것을 작동 "바인딩"을 "라이브"변경 또는 내가 할 때 경우 :

$('.addButton').live("click", function() { 
    that.somefunction("addSomething"); 
}); 

이 너무 작동합니다. 그러나 동적으로 추가 된 요소에 실시간 추가 기능이 작동하지 않는 이유는 무엇입니까?

아이디어가 있으십니까?

답변

1

live()은 부모 요소의 이벤트를 검사해야합니다. 설정 한 방식대로 이벤트를 부모 요소로 전파 할 수 없습니다. 방식 때문에 live() 작품의

+0

감사합니다. 이제 알았어. –

1

는 :

는 .live() 메소드가 아직 이벤트 위임의 사용을 통해 DOM에 추가되지 않은 요소에 영향을 미칠 수있다 : 핸들러는에 바인딩 조상 요소는 자손 에서 트리거되는 이벤트를 담당합니다. .live()에 전달 된 핸들러는 요소에 바인딩되지 않습니다. 대신 .live()는 DOM 트리의 루트에 특수 처리기를 바인딩합니다. 위의 예에서 새 요소를 클릭하면 단계가 발생합니다. 클릭 이벤트가 생성되어 처리를 위해 으로 전달됩니다. 아무 핸들러도에 직접 바인딩되어 있지 않으므로 이벤트가 DOM 트리를 버블합니다. 이 이벤트는 트리의 루트 인 에 도달 할 때까지 버블 링됩니다.이 트리는 .live()가 특별한 핸들러를 기본적으로 바인딩하는 곳입니다. * jQuery 1.4부터 이벤트 버블 링은 선택적으로 DOM 요소 "컨텍스트"에서 중단 될 수 있습니다. .live() 으로 바인드 된 특수 클릭 핸들러가 실행됩니다. 이 핸들러는 계속 진행해야하는지 여부를 확인하기 위해 이벤트 객체의 대상을 테스트하여 을 확인합니다. 이 테스트는 $ (event.target) .closest (". clickme")가 일치하는 요소를 찾을 수 있는지 확인하여 수행됩니다. 일치하는 요소가 발견되면 원래 핸들러는 입니다.이벤트가 발생할 때까지 5 단계의 테스트가 수행되지 않으므로 언제든지 요소를 추가 할 수 있으며 이벤트에 계속 응답 할 수 있습니다.

생명체는 이벤트를 객체에 바인딩하지 않으며, 리스너를 윈도우에 첨부 한 다음 이벤트가 거품을 내면 원래 대상을 확인합니다. 따라서 새 객체에 추가하지 마십시오.

관련 문제