У меня есть приложение, которое должно быть отключено через 28 минут. Он покажет диалоговое окно jQuery в течение 2 минут. Если пользователь нажимает «ОК» в течение двух минут, таймер обновляется до 28 минут, и когда обратный отсчет достигает 0 минут, он должен снова отобразить диалоговое окно jQuery.
Проблема в том, что когда я отлаживаю, я вижу, что переменная тайм-аута не очищает тайм-аут. После того, как я нажимаю «ОК», таймер сбрасывается до 28 минут, но setTimeout больше не отображает диалоговое окно, когда обратный отсчет достигает 0 минут.
Вот мой код:
var timeout;
function timer() {
countDownDate = 0;
console.log("Hello");
countDownDate = 0;
var timeExpires = new Date().getTime();
countDownDate = timeExpires + 1680000;
now = 0;
distance = 0;
if(timeout){
clearTimeout(timeout);
}
// Update the count down every 1 second
var x = setInterval(function () {
// Get todays date and time
now = new Date().getTime();
// Find the distance between now an the count down date
distance = countDownDate - now;
// Time calculations for days, hours, minutes and seconds
var days = Math.floor(distance / (1000 * 60 * 60 * 24));
var hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
var minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));
var seconds = Math.floor((distance % (1000 * 60)) / 1000);
if (distance < 0) {
if ($("#alert").length) {
var title;
if ($("#alert span").length) {
title = $("#alert span").text();
}
$("#alert div").dialog({
title: title,
modal: true,
buttons: {
Ok: function() {
var foo = $(this);
clearTimeout(timeout);
timer();
foo.dialog('close');
},
Cancel: function() {
esriId.destroyCredentials();
window.location.replace(redirect_uri);
}
}/*,
open: function() {
var foo = $(this);
timeout = setTimeout(function() {
foo.dialog('close');
esriId.destroyCredentials();
window.location.replace(redirect_uri);
}, 120000);
},*/
});
}
timeout = setTimeout($("#alert div").dialog("open"), 120000);
clearInterval(x);
}
}, 1000);
};
Вот HTML div для оповещения:
<div id="alert" style="display:none">
<span>You will be signed out</span>
<div>You will be signed out due to inactivity on the page. If you wish to stay on the page, please press 'Ok'</div>
</div>
setTimeout()
должен быть ссылкой на функцию. Вы вызываете.dialog('open')
немедленно и передаете возвращаемое значение вsetTimeout()
. - person nnnnnn   schedule 10.07.2017