Если вы прикрепите два или более обработчика событий к элементу HTML, они будут выполняться один за другим. Однако, если вы хотите остановить последующие обработчики событий, основываясь на условии, проверенном в первом обработчике, что вам следует делать?
Например:
<div id='target'>
</div>
<p id='result'>
</p>
Я бы хотел отменить второй обработчик, если отменен первый обработчик.
$(function() {
var target = $('#target'),
result = $('#result');
target.click(function(e) {
result.append('first handler<br />');
// Here I want to cancel all subsequent event handlers
});
target.click(function(e) {
result.append('second handler<br />');
});
});
Вы можете увидеть скрипку здесь .
PS: я знаю, что e.preventDefault()
предотвращает действие по умолчанию элемента HTML (например, предотвращает отправку запроса HTTP GET из-за щелчка по ссылке), и e.preventPropagation()
вызывает распространение события на его родительские элементы в дереве DOM. Я также знаю, что можно использовать среднюю переменную, установить ее в true в первом обработчике и проверить ее в последующих обработчиках. Но я хочу посмотреть, есть ли более аккуратное, изощренное решение этой проблемы или нет.