2011-08-09 5 views
2

요소에서 jQuery로 연결된 이벤트가 먼저 발생합니까?

웹 페이지에 버튼이 있다고 가정합니다.

<input type='button' id='myButton' value='Click me!' /> 

다음 jQuery를 작성한다고 가정 해 보겠습니다.

$(document).ready(function() { 
    var button = $('#myButton'); 
    button.click(doThis); 
    button.click(doThat); 
} 

function doThis() { 
    // do something 
} 

function doThat() { 
    //do something else 
} 

버튼을 클릭하면 먼저 어떤 함수를 먼저 실행해야하는지 알 수 있습니까? 아니면 내 통제 범위를 넘어서는 것에 의존 하는가?

+0

그들은 등록이 이루어진 순서대로 거의 불려질 것입니다. 그러나 그것은 의지가 무서운 것 같습니다. – Pointy

답변

9

핸들러들이 요소에 첨부 된 순서에 따라 실행합니다 (documentation 참조)에 등록 여러 핸들러가있는 경우, 그들은 항상 이들이 결합 된 순서대로 실행할

.

귀하의 경우에는 먼저 doThisdoThat이 실행됩니다.

참고 : 이것은 jQuery에만 적용됩니다. 순수 DOM 이벤트 처리기에 대한 자세한 내용은 @StuperUser's answer을 참조하십시오.

JavaScript의 이벤트 처리에 대한 일반적인 내용은 the articles at quirksmode.org을 권장합니다.

0

이들을 바인딩하는 순서대로 실행됩니다 (doThis 다음에 doThat).

3

jQuery 이벤트는 @ Felix Kling과 @Kyle이 첨부 된 순서대로 실행됩니다.

이것은 jQuery 외부의 케이스가 아닙니다. jQuery in Action Second Edition에 따르면 - DOM 레벨 2 이벤트 모델에 핸들러가 순서대로 발사에도 불구하고 그들이 설립 한 것을

주 (예 또는 addEventListener보다는 $.bind 또는 호출 방법을 사용하여), 이 순서는 아니다 표준에 의해 보장!이 코드의 테스터는 설정 순서 이외의 순서를 관찰 한 적이 없지만이 순서에 의존하는 코드를 작성하는 것은 어리석은 일입니다. 요소에 설정된 여러 핸들러는 임의의 순서로 실행될 수 있습니다.

jQuery를 사용하는 또 다른 이유.

+0

순수한 DOM 이벤트 핸들러에서는 true이지만 jQuery에서 처리되는 이벤트 핸들러에서는 그렇지 않을 수 있습니다. –

+1

@Felix Kling, 귀하의 링크에서'bind()'에 대한 답변을 읽고 이에 따라 답변을 업데이트했습니다. – StuperUser

관련 문제