2013-08-07 3 views
0

최근 내가 요소 이벤트에 대한 장에서, John Resig의 책 Secrets of Javascript Ninja을 읽고, 그가 쓰기 :Javascript : 스스로 이벤트 처리기를 관리해야합니까?

을 이유로 들어, 요소에 직접 이벤트 처리기를 바인딩하지하는 것이 유리하다.

그래서 그의 다음 코드에서, 그는 캐시 큐 등으로 정의 addEvent detachevent dispatcher triggerevent 방법 및 저장 이벤트 핸들러를 정의합니다.

브라우저 호환성 문제에도 불구하고, 이벤트 처리기를 요소에 직접 바인딩하지 않는 다른 이유가 있습니까?

+0

목록 페이지의 편집 단추 처리기 또는 50 개 항목과 같은 많은 요소에 처리기를 추가하려는 경우 선호하는 경우가 있습니다. –

+1

요소에 수신기를 추가할지 또는 부모에게 "위임"할지 요소는 (지정되지 않은) 브라우저 비교 가능성 문제와 관련이 없습니다. 애플리케이션 디자인과 관련이 있습니다. 하나의 리스너를 필요로하는 모든 셀에 리스너를 추가하는 대신 테이블의 모든 클릭 이벤트를 처리하는 테이블에 단일 리스너를 추가하는 것이 유리할 수 있습니다 (보다 단순한 로직, 유지 보수 등). – RobG

답변

2

이 모델을 사용하는 한 가지 이유는 동적 요소를 다룰 때입니다.

각 요소를 만든 후에 처리기를 요소 자체에 연결하려면 핸들러를 부착해야하지만 이벤트 위임을 사용하고 처리기를 요소에 등록하는 것을 선호합니다 항상 거기에있는 다음 대상 요소를 필터링하십시오.

0

이유는 동일한 섹션의 뒷부분에 나와 있습니다. 나는 참조 용으로 그냥 복사 중입니다 :

■ 이벤트 인스턴스가 수정되었습니다.

■ 함수 컨텍스트가 대상 요소로 설정됩니다.

■ 이벤트 인스턴스는 유일한 인수로 처리기에 전달됩니다.

■ 이벤트 처리기는 항상 바인딩 된 순서대로 실행됩니다.

게다가 핸들러 제거를보다 명확하게 제어 할 수 있습니다.

0

각 이벤트 리스너와 각 이벤트에 대한 참조를 유지하면 이벤트 수신기를 추적하는 것이 훨씬 쉽습니다. 그것은 당신에게 약간의 통제를 제공합니다; 이제는 언제 사용해야할지 선택할 수 있습니다.

관련 문제