Это потому, что alert()
является модальной операцией, которая блокирует поток пользовательского интерфейса браузера от обновления.В приведенном выше коде, когда вы вызываете alert()
, DOM все еще находится в процессе обновления, но еще не завершил перерисовку, но поток заблокирован от завершения до тех пор, пока пользователь не отклонит alert()
.
У вас есть три решения.Во-первых, вы можете поместить alert()
в тайм-аут, чтобы задержать его:
$('#myElement').show();
setTimeout(function(){
alert('test');
}, 20); // 20ms should be a long enough delay even on the slowest machines
Во-вторых, вы можете использовать библиотеку для отображения немодальных оповещений внутри самого DOM, т.е. Сообщать .
Наконец, предполагая, что ваша цель только для тестирования / отладки, вы можете использовать console.log()
, поскольку это не модальная операция:
$('#myElement').show();
console.log('test');
Чтобы увидеть консоль, нажмите F12 в вашем браузере.Обратите внимание, что этот метод, наряду с console.dir()
, всегда должен использоваться для отладки, а не alert()
.