Посмотрите на версию addEventListener
:
document.getElementById('outer').addEventListener('mouseup', function (event) {
alert('This alert should not show up!');
}, false);
Это работает отлично, потому что третий аргумент useCapture
, который указывает, следует ли использовать фазу захвата события.
Когда вы переключаетесь на версию jQuery:
$('#outer').on('mouseup', function (event) {
alert('This alert should not show up!');
}, false);
Я думаю, что это третий аргумент, просто переопределяет функцию обработчика событий и вызывает обработчик события
Из jQuery docs (выделено мной):
Функция, выполняемая при срабатывании события. Значение false также разрешено как сокращенное выражение для функции, которая просто возвращает false.
blockquote>Удалите аргумент
false
, и версия jQuery будет работать правильно:$('#outer').on('mouseup', function (event) { alert('This alert should not show up!'); });
Обратите внимание, что
alert
должен отображаться , поэтому подходaddEventListener
работает правильно. См. Ответ @ Pointy, почему это так.