Я столкнулся с неожиданным поведением JS setTimeout
, когда открыты модальные диалоговые окна, такие как alert
, и я хотел бы знать причину этого.
Я ожидал, что setTimeout (fn, 10000) будет означать «периодически проверять текущее время, и когда оно больше, чем сейчас + 10000 мс, запускать обработчик событий, который будет вызывать переданную функцию« fn »». Это было бы логично, учитывая, как мы передаем меру тайм-аута как «мс с этого момента». Но, по-видимому, обратный отсчет setTimeout
является буквальным обратным отсчетом и будет приостановлен, пока открыто модальное окно.
setTimeout(function(){
//alert A
alert("10 seconds have passed for the first setTimeout")
}, 10000);
setTimeout(function(){
//alert B
alert("Wait for 15 seconds and press OK");
},1000);
Я ожидаю, что оповещение A отобразится сразу после того, как вы закроете оповещение B (предполагая, что вы ждали этого 15 секунд), поскольку время ожидания оповещения A составляло всего 10 секунд, и они уже прошли. Практика, однако, показывает, что обратный отсчет до оповещения А просто приостанавливается, пока открыто оповещение Б, и показывается только через прибл. Прошло еще 9 секунд после того, как вы закрыли предупреждение B, независимо от того, как долго B было открыто.
Это не кажется логичным.
Обновление. Я определенно не единственный, кто здесь запутался, потому что такое поведение приостановки тайм-аута происходит в Chrome и Internet Explorer, но не в Firefox. Firefox ведет себя так, как я и ожидал: если вы ждете 15 секунд с предупреждением B, предупреждение A появляется сразу же, как только вы его закрываете.
alert
не подходят, особенно с функциями синхронизации. - person soktinpk   schedule 24.10.2014alert
и/илиconfirm
. Однако, почему вы хотите немного подождать, пока не появитсяalert
? - person soktinpk   schedule 24.10.2014