2012-09-03 2 views
0

언제 바인드 함수를 사용해야하는지, 그리고 jquery에서 델리게이트 함수를 사용해야하는지 알고 싶습니다. 그들은 같은 기능을 수행하지 않습니까? 그 차이점은 무엇입니까? (; @Yoshi에 의해 지적 bind이되지 않는 한, 또는 더 나은 아직, on) 당신이 이벤트 리스너를 바인딩 할 몇 가지, 기존 요소가있을 때언제 jquery에서 대리자를 사용할 때 bind와

답변

3

당신은 bind를 사용합니다. 처리하려는 요소가 아직 존재하지 않는 경우 delegate을 사용합니다 (예 : 동적으로 생성되고 생성 한 각 요소에 핸들러를 바인딩하지 않지만 대리자를 둘 수있는 공통 부모가 있음). 또는 공통 부모 (각 요소의 개별 처리기보다 부모의 대리자가 더 효율적 임)를 사용하여 많은 요소에서 이벤트를 처리 할 때 유용합니다.

DOM 이벤트는 DOM 계층까지 거품, 그래서 당신은 그 요소에 대한 onclick 핸들러가 트리거 요소를 클릭하면, 다음 부모, 다음 부모 등 (에 핸들러 핸들러는에 stopPropagation를 호출하지 않는 한 이벤트를 사용하면 더 이상 버블 링을 취소합니다. bind/on을 사용하면 처리 할 특정 요소에 핸들러를 첨부하고 설정 한 대상에 의해 직접 트리거되며, delegate을 사용할 때, jQuery 내부 핸들러가 지정한 요소에 연결되고 버블 체인을 따라 가면서 이벤트를 포착하고 jQuery는 실제 대상 (핸들러가 연결된 요소의 자식)이 셀렉터와 일치하는지 확인합니다. 에 지정된 위임, 그리고 그것이 호출되면 (실제 핸들러가 부모 요소가 아닌 대상 요소에 첨부 된 것처럼 호출됩니다. @shannon이 지적한).

+2

['on'] (http://api.jquery.com/on/) 두 가지 방법이 모두 좋기 전에 선호됩니다. – Yoshi

+1

대리자는 부모 요소에 적용되지만 이벤트는 트리거 된 자식 요소에 있었던 것처럼 * 호출됩니다. 또한 델리게이트를 사용하면 관심있는 요소의 * 하위 항목 *을 처리하기 전에 이벤트를 먹지 않도록해야하며 해당 요소와 대리자가 적용된 조상 사이의 모든 요소도 확인해야합니다. – shannon

+0

@ Yoshi 왜 다른 두 가지 방법보다 선호됩니까? – lakesh

관련 문제