시도 # 1 : 이벤트가 발생합니다 먼저 상대방의 옛 핸들러를 삭제됩니다
request1.onComplete = function() {
// register new handler for event2 here, overwriting the old one
request2.onComplete = function() {
// now they're both done
}
}
request2.onComplete = function() {
// register new handler for event1 here, overwriting the old one
request1.onComplete = function() {
// now they're both done
}
}
핸들러 중 대한과를 포함하는 새로운 하나를 할당 : 여기에 추가로 전역 변수를 필요로하지 않는 솔루션입니다 두 가지 사건이 모두 끝난 후에해야 할 일. 우리는 두 번째 처리기를 첫 번째 처리기의 처리기 (둘 중 어느 것이 든)에서 다시 할당하기 때문에 두 번째 처리기가 완료 될 때 완료된다는 것을 항상 알고 있습니다.
시도 # 2 : 사용자가 모두 스크롤 및 클릭 할 때까지
function onBoth(fn) {
var last, done = false;
return function(e) {
if (last && last !== e.type && !done) {
fn(); // done
done = true;
}
last = e.type;
}
}
예를 들어,이 "완료"경고하지 않습니다 : 다음은 각 이벤트 유형이 다른 경우 작동 뭔가의
var both = onBoth(function() {
alert("done")
});
document.addEventListener("scroll", both, false);
document.addEventListener("click", both, false);
시도 # 3 :
: 이전의 시도는 비슷한 이벤트에 대한 작업을 수정할 수 있습니다 이와 같이 표기
는 ... :
var check = onBoth(function() {
alert("done")
});
request1.onComplete = function() {
check(arguments.callee);
}
request2.onComplete = function() {
check(arguments.callee);
}
기본적으로,이 두 가지 콜백 다시 가장 최근에 실행 된 호에 대한 참조를 저장함으로써 실행되는 것을 확인한다. 사용법은 조금 복잡하지만 작업이 완료됩니다 (즉, 각 이벤트가 두 번 이상 실행될 경우 계속 작동합니다). 그것을 할 수
이러한 이벤트가 특정 순서로 발생하기를 기대합니까? 그것은 솔루션에 큰 영향을 미칩니다. –
아니요, 가능한 모든 주문 – Evert