2012-01-27 2 views
6

은 이벤트 핸들러가 등록 된 순서대로 처리된다고 생각합니다. (맞습니까?) 그렇다면 스크립트 시작 부분에 이벤트 처리기를 연결하면 후속 처리기가 동일한 이벤트에 연결되기 전에 해당 이벤트 핸들러가 실행될 것이라는 것을 확신 할 수 있습니까? 또한 이벤트 네임 스페이스가 이에 영향을 미칩니 까? 이벤트 처리기가 연속적으로 실행됩니까 (이전에 완료됩니다)? 또는 병렬로 발생합니까?jQuery 이벤트 핸들러 실행 순서 확인

내 스크립트가 크기 조정 이벤트가 변경되는 뷰포트 크기에 의존하기 때문에이 작업을 수행하고 싶습니다. 끊임없이 찾아야합니다. 각 처리기 함수에서 반복적으로 $(window).width()을 호출하는 대신 각 크기 조정시 개체 속성에 $(window).width()을 저장하는 스크립트의 맨 위에 처리기를 넣고 싶습니다. 그런 다음 후속 처리기에서이 속성에 액세스하여 가장 최근 측정 값임을 확신 할 수 있습니다.

계산이 완료되면 즉시 트리거하는 사용자 지정 이벤트를 만들고 이후 이벤트 핸들러를 사용자 지정 이벤트에 연결할 수 있음을 알고 있습니다. 그러나, 나는 resize 이벤트에 붙어있을 수도있는 광산에서 오는 플러그인과의 상호 운용성을 유지해야하기 때문에 그렇게하고 싶지 않습니다.

+1

http://stackoverflow.com/questions/290254/how-to-order-events-bound-with-jquery를 참조하십시오. – ustun

+0

'$ (window) .width()'에 중요한 성능을 잃어 가고 있습니까? 그렇지 않다면, 왜 귀찮게합니까? 전역 변수의 상태에 대해 깨지기 쉬운 의존성을 도입 할 것입니다. – millimoose

+0

@Inerdial 20 회와 같이 다른 계산을 호출해야합니다. 나는 그것이 차이를 만들 것이라고 생각합니다. – ryanve

답변

4

다른 스크립트가 실행되기 전에 이벤트 처리기를 연결하면 (심지어 플러그인 만) 콜백이 항상 먼저 실행됩니다.

하여 데이터 객체를 통해 이벤트 처리기의 배열을 검사 할 수 있습니다 :

$(window).data('events'); 

참고 :이 아닌 문서화 된 접근 방식이다 결국 작동하지 않을 수 있습니다. 검사에만 사용하십시오.

+0

미안하지만, 거기에 순수한 자바 스크립트로 접근 할 수있는 방법이 있습니까? –

+3

@ AndréAlçadaPadez - 아니요. 뿐만 아니라 jQuery를 사용하여 첨부 한 이벤트 핸들러 만 제공합니다. –

+1

감사합니다, 자바 스크립트 이벤트에 많은 문제가 있습니다 :) –