У меня есть написанная функция Jquery, которая затемняет экран после определенного периода бездействия, создает всплывающее окно, позволяющее пользователю нажимать кнопку, чтобы оставаться в системе, и выходить из системы (закрываяокно приложения), если они не отвечают вовремя.
Среда - ASP.NET (VB).Технически мы не используем главные страницы, но у нас есть родительская страница, в которой находятся наш верхний и нижний колонтитулы, а также мой код Jquery, вызываемый из этого окна и загружаемый через IFrame.
Моя проблемачто если кто-то работает в дочернем окне, родительское окно не распознает, что система используется, и автоматически включится в назначенное время.
Я пробовал все под солнцем, я думаю,и ничего не работает должным образом.Мой обработчик событий работает, и он вызывает функцию родительского окна, но таймер не сбрасывается.
У меня есть эта функция в родительском окне:
<script language="javascript" type="text/javascript">
function window.reportChildActivity() {
SESSION_ALIVE = true;
window.setTimeout("pop_init()", SESSION_TIME);
}
</script>
И это вдочернее окно:
<script type="text/javascript">
$(document).bind("mousedown keydown blur", function() {
window.parent.reportChildActivity(); });
</script>
Независимо от того, сколько я нажимаю или использую ключи в дочернем окне, мой код тайм-аута Jquery вызывается, когда SESSION_TIME заканчивается в первый раз.И затем я получаю несколько окон Jquery на своей странице, предлагающих мне нажать, чтобы продолжить.Это похоже на то, что события буферизируются, и когда они запускаются, все эти окна появляются несколько раз.Кто-нибудь видит из этого, что я делаю не так?Спасибо!
---- РЕДАКТИРОВАТЬ ----- Я добавляю свою функцию pop_init и вспомогательные функции для справки:
// remove all added objects and restart timer
function popup_remove() {
$("#popup_window").fadeOut("fast", function() { $('#popup_window,#popup_overlay').trigger("unload").unbind().remove(); });
//if (typeof document.body.style.maxHeight == "undefined") {//if IE 6
$("body", "html").css({ height: "auto", width: "auto" });
$("html").css("overflow", "");
//}
window.setTimeout(pop_init, SESSION_TIME);
}
// session ajax call from button click
function session_refresh() {
SESSION_ALIVE = true;
$(".buttons").hide();
$("#popup_message").html("<center><br />Thank you! You may now resume using the application.<br /></center>");
window.setTimeout(popup_remove, 1000);
$("#popup_window").fadeOut("slow", function() { $('#popup_window,#popup_overlay').trigger("unload").unbind().remove(); });
window.setTimeout(pop_init, SESSION_TIME);
}
function popup_expired() {
if (!SESSION_ALIVE)
window.close();
}
// Main popup window handler
function pop_init() {
// show modal div
$("html").css("overflow", "hidden");
$("body").append("<div id='popup_overlay'></div><div id='popup_window'></div>");
//$("#popup_overlay").click(popup_remove); // removed to make sure user clicks button to continue session.
$("#popup_overlay").addClass("popup_overlayBG");
$("#popup_overlay").fadeIn("slow");
// build warning box
$("#popup_window").append("<h1>Warning</h1>");
$("#popup_window").append("<p id='popup_message'>Your session is about to expire. Please click the button below to continue working without losing your session.</p>");
$("#popup_window").append("<div class='buttons'><center><button id='continue' class='positive' type='submit'><img src='images/green-checkmark.png' alt=''/> Continue Working</button></center></div>");
// attach action to button
$("#continue").click(session_refresh);
// display warning window
popup_position(400, 300);
$("#popup_window").css({ display: "block" }); //for safari using css instead of show
$("#continue").focus();
$("#continue").blur();
// set pop-up timeout
SESSION_ALIVE = false;
window.setTimeout(popup_expired, 30000);
}