Как отменить событие.stopPropagation в jQuery? - PullRequest
11 голосов
/ 17 февраля 2012

Я использую event.stopPropagation() в своем приложении.Однако появился один сценарий, в котором я хочу, чтобы распространение продолжалось, как если бы вышеупомянутая функция никогда не вызывалась.Так что мне интересно; есть ли способ "возобновить" распространение после его остановки ?Было бы ужасно утомительно переносить один вызов на event.stopPropagation на дюжину отдельных условных операторов.

Ответы [ 4 ]

14 голосов
/ 17 февраля 2012

Как только распространение было остановлено, оно не может быть возобновлено. В качестве обходного пути вы можете установить переменную, а затем останавливаться, только если эта переменная имеет значение true:

var stop = false;
// do your logic here
if(stop){
    event.stopPropagation();
}
2 голосов
/ 19 июля 2013

Просто рефакторинг вашего оригинального события, как это:

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);
}
2 голосов
/ 17 февраля 2012

Поместите вызов event.stopPropagation() в ваше состояние.Например,

$el.click(function(event) {
    if (some_condition) {
        event.stopPropagation()
        // do stuff
    }
    else {
        // do other stuff, without stopping propagation
    }
});

Это может быть утомительно, но, к сожалению, stopPropagation является односторонним переключателем.Остановившись, вы не сможете снова включить его для того же события.

1 голос
/ 15 февраля 2017

Вот решение, которое работает:

$('#mydiv').on('click.new', function(e){

    e.stopImmediatePropagation();

alert('this will happen only once');

$('#mydiv').unbind('click.new');

});

Оно использует тот факт, что событие может иметь пользовательское пространство имен и может соответственно отменять привязку.Это также работает для e.stopPropagation.В этом отношении он может отменить все, что связано с этим пользовательским событием щелчка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...