Отмена обработки событий jQuery - PullRequest
9 голосов
/ 29 января 2009

Я установил обработчик события onclick следующим образом:

element.onclick = function() { /*code */ }

Представьте, что есть обработчики событий, настроенные с использованием метода jQuery bind () или аналогичных обработчиков.

$('element').bind('click', function(){/*another function*/})

Как я могу предотвратить вызов обработчика, определенного с помощью jQuery, из обработчика, который я описал в начале?

Примечание: stopPropagation () и т. Д. Методы jQuery не работают из этой функции, поскольку они передаются с собственным объектом события.

Ответы [ 4 ]

7 голосов
/ 29 января 2009

Я не на 100% уверен, что вы спрашиваете, но, возможно, это поможет:

Вы можете создать новый объект события (совместимый с W3C DOM) через открытый конструктор событий jQuery:

Например:

element.onclick = function(e) {
    var aBetterEventObject = jQuery.Event(e);
    // Now you can do what you want: (Cross-browser)
    aBetterEventObject.preventDefault()
    aBetterEventObject.isDefaultPrevented()
    aBetterEventObject.stopPropagation()
    aBetterEventObject.isPropagationStopped()
    aBetterEventObject.stopImmediatePropagation()
    aBetterEventObject.isImmediatePropagationStopped()
}

РЕДАКТИРОВАТЬ: Прочитав ваш вопрос еще раз, я не думаю, что распространение является проблемой - вы, похоже, хотите отменить запуск обработчика событий внутри обработчика событий - я не уверен, что это возможно. Вы можете просто отменить привязку всех обработчиков ( jQuery (elem) .unbind ('click') ), но я не думаю, что это то, что вам нужно ...

5 голосов
/ 29 января 2009

Исходя из ответа JimmyP. Я пробовал это

$('#x').click( function(e){
    alert('hello');
});
document.getElementById('x').onclick = function(){
    $('#x').unbind('click');
    alert("goodbye");
}

Событие jQuery в этом примере запускается один раз. Я не думаю, что вы можете полагаться на порядок вызова обработчиков, как бы вы их ни определяли, поэтому, я думаю, вам придется принять, что событие jQuery может сработать один раз. Сначала добавление onclick действительно предотвращает событие jQuery, но, как я уже сказал, я не думаю, что это надежно.

4 голосов
/ 29 января 2009

попробуйте добавить следующую строку в обработчик событий jQuery:

return false;
2 голосов
/ 29 января 2009

Jquery имеет метод для событий пространства имен. http://docs.jquery.com/Namespaced_Events

Вы можете добавлять, запускать и удалять отдельные функции, связанные с одним и тем же событием, через пространства имен:

$("a").bind("click.custom1",function(){ ... });
$("a").bind("click.custom2",function(){ ... });
$("a").trigger("click.custom2");
$("a").unbind("click.custom2");

Пока вы отменяете событие пространства имен, ваш обычный щелчок не должен быть затронут. Возможно, вам придется привязать два отдельных пространства имен к событию click, как указано выше, если это не сработает.

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