버블 링에서 내 hashChange 이벤트 바인딩을 유지하려고합니다.hashChange 이벤트에 대한 바인딩이 버블되지 않도록하는 방법은 무엇입니까?
$(window).bind('hashchange', function(e) {
console.log("hash fired");
// run hashChange routine
});
내 스크립트가 각 패널은 그 자체가 역사 스택을 갖는 페이지에 패널을 관리합니다
나는이 있습니다. 위의 모든 전환과 함께 화재,하지만 전방 전환에 hashChange를 막고있어, 그래서 패널에 더 깊이 탐색 할 수 있습니다. 뒤로 "전환"에서 hashChange 만 실행되고 차단되지 않으므로 백업 할 수 있습니다.내비게이션은 다음과 같습니다 나는 초기 설정 전에 페이지에 도달 할 때까지
panel A, start down > page2
panel A, page2 down > page3
panel A, page3 up > page2
panel A, page2 up > start - hashChange fires twice here...
모든 (= hashChange 한 번 발사) 잘 작동합니다. 마지막 단계에서 위의 hashChange 바인딩은 두 번 발생합니다. 제 2의 hashChange를 막기 위해 어딘가에 깃발을 세우려고 영원히 노력했지만 희망대로 작동하지 않습니다.
질문 :
어떻게 거품이 생기지 않도록 할 수 있습니까? 나는 이런 식으로 뭔가를 시도하고 있지만 작동하지 않는 : 당신이 이벤트 처리기는 한 번만 발사 할 경우
var $blockBubblingHashes = 0;
$(window).bind('hashchange', function(e) {
if ($blockBubblingHashes == 0) {
// run hashChange routine
$blockBubblingHashes = 1;
} else {
$blockBubblingHashes = 0;
}
});
stopPropagation()을 시도하십시오. 이것을 알지 못했습니다 ... – frequent
@frequent : 모든 'hashchange'를'window'에 바인딩하는 경우'stopImmediatePropagation()'을 사용해야하지만 "* jQuery는 같은 요소에 바인드 된 오더 이벤트 핸들러가 실행되므로 어떤 핸들러가 먼저 호출되는지 알 수있는 확실한 방법이 없습니다. * " – Matt
은 one()과"propgrations "모두에 대한 바인딩을 시도 했으므로 하나의 이벤트 만 발생합니다 해고당한 후 그 기능은 침묵한다. 도움이되지 않습니다. "hashChange에 한 번"발사해야하기 때문에 – frequent