Ответ 1
Вы хотите event.stopImmediatePropagation();
, если на элементе есть несколько обработчиков событий, и вы хотите запретить другим выполнять. preventDefault()
просто блокирует действие по умолчанию (например, отправляет форму или перемещается по другому URL-адресу), а stopImmediatePropagation()
предотвращает появление пузырьков в дереве DOM и предотвращает выполнение любых других обработчиков событий в одном элементе.
Вот несколько полезных ссылок, объясняющих различные методы:
- http://api.jquery.com/event.preventDefault/
- http://api.jquery.com/event.stopPropagation/
- http://api.jquery.com/event.stopImmediatePropagation/
Однако, поскольку он все еще не работает, это означает, что обработчик onclick=""
выполняется перед присоединенным обработчиком событий. С тех пор, когда ваш код запускает код onclick
, вы ничего не сможете сделать.
Самое простое решение - полностью удалить этот обработчик:
$('#button').removeAttr('onclick');
Даже добавление прослушивателя событий через простой javascript (addEventListener()
) с помощью useCapture=true
не помогает - по-видимому, встроенные события запускаются еще до событие начинает спускаться с дерева DOM.
Если вы просто не хотите удалять обработчик, потому что вам это нужно, просто преобразуйте его в правильно присоединенное событие:
var onclickFunc = new Function($('#button').attr('onclick'));
$('#button').click(function(event){
if(confirm('prevent onclick event?')) {
event.stopImmediatePropagation();
}
}).click(onclickFunc).removeAttr('onclick');