2012-08-03 2 views
10

내가 elment하는 이벤트를 핸들러를 클릭 추가 완료기다립니다

$(".elem").click(function(){ 
     $.post("page.php".function(){ 
     //code1 
     }) 
}) 

그리고 트리거 클릭 이벤트 내가 코드 1이

+0

"코드 1 실행"의 의미를 정의하십시오. 코드에는 ajax 메서드가 있습니다. 따라서 아약스 호출이 실행되거나 아약스가 실행되고 완료 될 때를 의미합니까? – Rahatur

답변

12

(무시 실행 후 CODE2 실행되었는지 확인하는 방법

$(".elem").click(); 
//code2 

WebWorkers) JavaScript는 단일 스레드에서 실행되므로 code2가 항상 code1 이후에 실행되는지 확인할 수 있습니다. 당신의 코드 1이 트리거 클릭 핸들러가 완료되는 경우 Ajax 호출 또는 setTimeout(), 같은 것을 비동기 작업을 수행하지 않는 한

후 CODE2는 Ajax 호출에서 (결국) 한 후, 콜백을 실행 (또는 setTimeout(), 또는 것 뭐든간에) 실행됩니다.

편집 : 업데이트 된 질문 내가 비동기 위에서 말했듯이 아약스 콜백 나중에 일어날 것이기 때문에, CODE2 항상 코드 1 전에 실행됩니다에 대한은 (Ajax 응답이 매우 빠른 경우에도, 그것은 때까지 콜백을 호출하지 않습니다 현재 JS 완료). 매개 변수없이와 .click().trigger("click")에 대한 바로 가기입니다 사용

"내가 코드 1이 실행 된 후에 CODE2 실행되었는지 확인하는 방법"하지만 실제로 .trigger()를 호출하는 경우 명시 적으로 추가 매개 변수를 제공 할 수

그 핸들러로 전달되어 다음을 수행 할 수 있습니다.

$(".elem").click(function(e, callback) { 
    $.post("page.php".function(){ 
     //code1 

     if (typeof callback === "function") 
     callback(); 
    }); 
}); 

$(".elem").trigger("click", function() { 
    // code 2 here 
}); 

즉, 클릭 핸들러 테스트 내에서 함수가 callback 매개 변수에 전달되었는지 여부와 그 경우 호출하십시오. 즉, 이벤트가 자연스럽게 발생하면 콜백이 없지만 프로그래밍 방식으로 트리거하고 함수를 전달하면 해당 함수가 실행됩니다. (.trigger()과 같이 전달하는 매개 변수는 함수 일 필요는 없으며 모든 유형의 데이터 일 수 있으며 둘 이상의 매개 변수를 전달할 수 있지만이 목적을 위해 함수가 필요합니다. 자세한 내용은 .trigger() doco을 참조하십시오.)

데모 : 발사하면서 트리거는 항상 실행됩니다,

$(".elem").live("click", function(){ 
    //code1 
}) 

을 그리고 : http://jsfiddle.net/nnnnnn/ZbRJ7/1/

+2

나는 그것이 사실이라고 생각하지 않는다. 동시에 실행되지는 않지만, DOM API가 이벤트 핸들러가 호출되는 순서에 대해 어떤 보증도 제공하지 않는다고 저는 생각합니다. 한 브라우저의 한 버전에서 올바른 순서로 실행되는 경우에도 다른 경우에는 어떤 일이 발생하는지 보장 할 수 없습니다. –

+0

예 아약스 전화가 있습니다. [질문 수정] –

+0

사람들, OP 질문에만 단 하나의 이벤트 처리기가 있습니다. code2가 방아쇠를 당깁니다. – JJJ

2

당신은이 방법을 쓰기 시도 할 수 있습니다.

2

code2 방법 등이 항상 code1 후 불려가는 code1 내부 콜백으로 추가가

code2 = function(){/*code2*/}; 
$(".elem").click(function(){ 
    //code1 
    code2(); 
}) 
+0

그 해결책이 아니야, 난 code2없이 다른 곳에서 클릭 이벤트를 실행하고 싶습니다 –

+1

당신은 결코 재사용해야한다고 언급하지 않았습니다. 위의 내용은 저에게 좋은 해결책입니다. –

+0

당신은 그것에 대해 아무 말도하지 않으 셨습니다. 나는 명확하지 않은 질문에 대해 아마도 하찮은 의견을 내려야 만합니다. 그러나 당신이 새로운 사람들이기 때문에 그렇게하지 않을 것입니다. @JonasGeiregat : 감사. – Gautam

-1

자바 스크립트 실행 라인으로 라인 실행합니다. 그래서 어떤 일이 일어나든지, 먼저 처형 될 것입니다. 따라서 다른 방법보다 먼저 클릭 코드를 추가하면됩니다.

플러스 비동기 호출이 있으면 응답을받을 때만 설정되는 플래그를 취하십시오.

var clicked = false; $ ('# elem').클릭 (function() { // 일부 비동기 프로세스 수행 clicked = true; });

는 동안 속성에 비동기 = true로 설정 후 방법을 사용하는 경우,

// 다른 기능은

를 호출 할 수 또는 두 번째 옵션이 될 것입니다 {// 아무것도 할} (! 클릭).

+2

while (! clicked) {}는 브라우저가 응답하지 않도록합니다. –

+0

그리고 두 번째 옵션은 게시물 요청이 완료 될 때까지 동일한 작업을 수행합니다. –

관련 문제