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