2011-12-26 6 views
1

나는 jQuery 함수의 혼란스럽게 다른 이벤트 버블 링 동작, 즉 click, delegatelive을 demost하기 위해 샘플 JavaScript 프로그램을 작성했습니다."click", "delegate"및 "live"가 jQuery를 사용하여 이벤트 버블 링의 관점에서 다르게 동작하는 이유는 무엇입니까?

여기는 demo page입니다. 각 기능

래퍼 클릭 이벤트 기능 등록 둘 랩퍼의 클릭 링크있을 것이다.

내가

  1. live에서
  2. delegate 이벤트 버블 링을 방지하지 않습니다 livedelegatestopPropagation를 사용하여 통지, 래퍼의 클릭 이벤트가 먼저 해고 옆 클릭 링크된다. 그러나이 순서는 click 기능의 경우 역순입니다.

아무도이 두 현상을 설명 할 수 있습니까?

샘플은 jQuery 1.6.4를 사용하고 있지만 버전을 조정할 수 있습니다.

+0

JQuery와를 [ doco for .'live()'] (http://api.jquery.com/live/)와 ['.delegate()'] (http://api.jquery.com/delegate/)는 이것을 설명합니다. 질문을 게시하기 전에 의사를 봐? – nnnnnn

+0

나는 노력했지만 조금 이해하기가 어려웠다. – xiaohan2012

답변

2

시작하려면 live is deprecated을 사용하고 jQuery 1.7+에서는 ondelegate을 사용합니다. 나는 나중에 live을 사용하는 것을 중지 할 것입니다. 위에 링크 된 문서는 실제로 매우 유익하고 이러한 기능이 어떻게 작동 하는지를 설명하는 훌륭한 작업을합니다.

대표자와 생존자 모두 버블 링에 의존합니다. 클릭과 다른 점은 무엇입니까? 이벤트가 그들에게 버블 링했습니다. 대리인은 특정 부모를 모니터링하도록 말하기 때문에 대리인이 문서 수준까지 계속 거품을내는 반면 라이브에 비해 우월합니다. 매우 비쌉니다.

.live 때문에()가 에 문서의 상단을 전파 일단 방법은 라이브 이벤트의 전파를 중지 할 수 없습니다, 이벤트를 처리합니다

JQuery와 문서는 여기에 인용 가치가있다 . 비슷하게 .delegate()가 처리하는 이벤트는 위임 된 요소에 을 전달합니다. 에 바인딩 된 이벤트 핸들러는 위임 된 이벤트 핸들러가 호출 될 때까지 이미 실행 된 것입니다. 따라서 이러한 핸들러 은 delegated 처리기가 event.stopPropagation()을 호출하거나 false를 반환하여 트리거하지 못하게 할 수 있습니다.

1

라이브 및 위임의 구현을 이해하면 이러한 차이가 발생한 이유를 이해할 수 있습니다. 요소가 바인딩 될 때 루트 또는 특정 부모 중 하나에 연결되므로 차이가 발생하지 않으므로 라이브 및 대리자는 요소에 연결되지 않습니다.그리고 이벤트의 사용이 너무 버블 링을 만들어 해당 이벤트는 아이의 루트 또는이 주변의 상세보기이 블로그 항목을 참조 새로 추가 된 요소에 대해 실행하는 특정 부모에 거품 때

http://www.alfajango.com/blog/the-difference-between-jquerys-bind-live-and-delegate/

관련 문제