Почему alert() нарушает выполнение кода?
Когда мы используем alert()
, иногда код прерывается.
Например:
HTML:
<span>Hi</span>
JavaScript:
$(document).ready(function () {
$("span").dblclick(function () {
alert("b");
});
$("span").click(function () {
alert("a");
});
});
alert("b")
даже не отображается.
Но если мы изменим как alert()
, так и console.log
, он заносится в журнал.
Alert Demo и консоль .log Demo
Итак, что происходит?
Ответы
Ответ 1
alert
открывает диалог модели. Когда он открыт, вы не можете взаимодействовать с какой-либо частью страницы, кроме самого оповещения.
Поскольку вы не можете взаимодействовать со страницей, вторая половина двойного щелчка не может достичь диапазона, поэтому событие двойного щелчка не будет срабатывать.
Ответ 2
Использование alert()
останавливает выполнение всего кода. Было бы невозможно зафиксировать двойной щелчок, если вы уже фиксируете единственный щелчок на остановке выполнения кода.
Чтобы продемонстрировать, я прокомментировал alert
за один клик в вашей скрипке. Вы можете видеть ЗДЕСЬ, что теперь предупреждение происходит при двойном щелчке.
Ответ 3
Потому что вы ловите первый щелчок и показываете предупреждение. Второй щелчок не попадает, потому что теперь в центре внимания находится предупреждение.
Если вы заходите на консоль, то оба щелчка поймаются, и вы заметите, что "a" дважды регистрируется.
Ответ 4
Есть несколько функций, которые останавливают выполнение кода при их вызове. Это называется синхронными функциями, вызывающими паузу в коде, пока вы не нажмете OK
. alert() является синхронным и поэтому является подсказкой(). Это приводит к тому, что событие click имеет место и приостанавливает выполнение кода, поэтому не происходит больше событий двойного щелчка...