Я использую event.stopPropagation()
в своем приложении. Однако появился один сценарий, в котором я хочу, чтобы распространение продолжалось так, как если бы вышеупомянутая функция никогда не вызывалась. Поэтому мне интересно; есть ли способ "возобновить" распространение после его остановки.? Было бы очень утомительно перенести один вызов на event.stopPropagation
на дюжину отдельных условных операторов.
Как отменить event.stopPropagation в jQuery?
Ответ 1
Как только распространение остановлено, оно не может быть возобновлено. В качестве обходного пути вы можете установить переменную, а затем остановится только в том случае, если эта переменная истинна:
var stop = false;
// do your logic here
if(stop){
event.stopPropagation();
}
Ответ 2
Поместите вызов event.stopPropagation()
в ваше состояние. Например
$el.click(function(event) {
if (some_condition) {
event.stopPropagation()
// do stuff
}
else {
// do other stuff, without stopping propagation
}
});
Зачастую это может быть, но, к сожалению, stopPropagation - это односторонний переключатель. После остановки вы не можете включить его для одного и того же события.
Ответ 3
Просто настройте свое оригинальное событие следующим образом:
var refEvent = event.originalEvent;
refEvent.cancelBubble = false;
refEvent.defaultPrevented = false;
refEvent.returnValue = true;
refEvent.timeStamp = (new Date()).getTime();
if (event.target.dispatchEvent){
event.target.dispatchEvent(refEvent);
} else if (event.target.fireEvent) {
event.target.fireEvent(refEvent);
}
Ответ 4
Вот решение, которое работает:
$('#mydiv').on('click.new', function(e){
e.stopImmediatePropagation();
alert('this will happen only once');
$('#mydiv').unbind('click.new');
});
Он использует тот факт, что событие может иметь собственное пространство имен и может отпереть соответствующим образом. Он также работает для e.stopPropagation
. В этом случае он может отменить все, что связано с этим пользовательским событием клика.