2012-01-29 2 views
3

웹 페이지에는 클릭 및/또는 키 누르기 핸들러가있는 요소가 있습니다. 새 항목을 추가하면 해당 항목이 실행됩니다. 이벤트 핸들러 목록 앞에 추가 된 새로운 콜백을 추가하여 미리 실행되도록해야합니다. jQuery로 어떻게 가능합니까?jQuery 이벤트 : 이미 존재하는 것들에 콜백 핸들러 추가

업데이트

왜 난 그냥 jQuery의 결합 해제 방법을 사용할 수 없습니다? 모든 jQuery 코드를 임의의 웹 페이지에 삽입하므로 어떤 JavaScript 프레임 워크가 사용되는지 알 수 없습니다. 이벤트 처리기를 감지하고 내 앞에 붙이는 보편적 인 방법이 필요합니다. (당신이하기 전에, 나는 사용자의 작업을 저장하고 나중에이를 실행하기 위해 추적하는 "기록"응용 프로그램을 짓고 있어요.)

업데이트 2

난 단지 파이어 폭스, 필요가 없습니다를 들어 사용 IE 호환성. 페이지가 완전히로드 될 때까지 기다렸다가 jQuery 스크립트가 호출됩니다.

+0

당신이 제어 할 수있는 스크립트입니까? 즉, 바인딩을 해제하고 모든 것을 다시 바인딩 할 수 있습니까? – kinakuta

+0

콜백은 이벤트가 발생한 후에 항상 실행됩니다. 이전 처리기에서 추가 작업을 수행하려는 경우 기존 처리기의 코드를 수정하지 않는 이유는 무엇입니까? –

+0

며칠 전에 같은 질문을했습니다. 한번 살펴 보겠습니다. – Avaq

답변

2

이벤트 캡쳐 (자식 -> 조상) 대신 버블 링 (이벤트가 요소에 도달하기 전에 조상 핸들러가 호출 됨)을 사용하면이 방법이 효과가 있다고 생각합니다. 이는 대상 요소에 도달하기 전에 이벤트를 인터셉트하는 방법입니다.

대부분의 이벤트 처리기는 이벤트 버블 링을 사용합니다. w3c에 따르면 이벤트가 먼저 캡처 된 다음 대상에서 다시 이벤트가 발생합니다. 따라서 캡처를 사용하여 이벤트를 문서에 바인딩하면 페이지의 모든 요소에 대해 먼저 실행됩니다.

http://www.w3.org/TR/2000/REC-DOM-Level-2-Events-20001113/events.html#Events-flow-capture

당신과 처리기를 바인딩 할 것 :

document.body.addEventListener('click',handler,true) 

이 이벤트 전에 요소에 모든 클릭에 대해 실행됩니다 (세 번째 인수는 캡처 이벤트를 사용할지 여부입니다) 핸들러가 실행됩니다. 브라우저의 지원에 대해서는 확실하지 않습니다.

+0

이것은 작동하는 것 같습니다. 고마워요. 나는 그것이 가능한 모든 경우를 다루지 않을 것이라고 생각하지만. – Alp

관련 문제