Я столкнулся с неожиданным поведением JS setTimeout
, когда модальные диалоговые окна, такие как alert
, открыты, и я хотел бы знать причину этого.Почему модальные окна сообщений JS приостанавливают обратный отсчет на setTimeout()?
Я ожидал, что 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);
Я ожидал бы предупредить, чтобы сразу отобразить после закрытия предупреждения B (предполагая, что вы ждали в течение 15 сек., Чтобы сделать это), так как тревога тайм-аут был только на 10 секунд, и они уже прошли. Практика, однако, показывает, что обратный отсчет до предупреждения A просто приостанавливается, пока предупреждение B открыто, и оно будет отображаться только после ок. Еще 9 секунд прошло после того, как вы закрыли предупреждение B, независимо от того, как долго был открыт B.
Это не кажется логичным.
Обновление. Я определенно не единственная путаница здесь, потому что это поведение приостановки таймаута происходит в Chrome и Internet Explorer, но не в Firefox. Firefox выполняет поведение, которое я ожидал, - если вы ждете 15 секунд при оповещении B - предупреждение A всплывает мгновенно, когда вы его закрываете.
Это одна из причин, почему 'alert's не хорошо, особенно с функциями синхронизации. – soktinpk
@soktinpk Мы используем такие вещи, как Bootbox для оповещений в наших проектах, но бывают случаи, когда это неприменимо, например, когда вам нужно предупреждать пользователя о несохраненных данных после закрытия страницы. Я не могу представить, что люди часто сталкиваются с проблемами из-за этого поведения, но тем не менее интересна большая разница в поведении между тремя большими браузерами. –
Предупреждение пользователя о несохраненных данных является вполне допустимым использованием для 'alert' и/или' confirm'. Однако почему вы хотите немного подождать до появления «предупреждения»? – soktinpk