2010-09-03 3 views
0

Я написал функцию JQuery, которая затемняет экран после определенного количества бездействия, создает всплывающее окно, которое позволяет пользователю нажимать кнопку, чтобы оставаться в системе , и протоколирует их (закрывая окно приложения), если они не отвечают вовремя.Код таймаута Jquery не перезапускается после первого сеанса пользователя.

Окружающая среда - ASP.NET (VB). Мы технически не используем мастер-страницы, но у нас есть родительская страница, в которой находятся наш верхний колонтитул, нижний колонтитул и nav, и мой код JQuery вызывается из этого окна, загружаемого через IFrame.

У меня есть функция в дочернем окне, которая сообщает о активности (в настоящее время keydown, mousedown и blur) в родительском окне и сбрасывает таймер. Мой код работает нормально, за исключением одного сценария. Если пользователю предлагается предупреждение о тайм-ауте, а затем нажмите кнопку, чтобы продолжить сеанс, если они не предпринимают никаких действий на странице (mouseclick, keydown и т. Д.), Тогда код тайм-аута не будет работать во второй раз.

Вот моя главная функция JQuery:

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'><center>Your session is about to expire. Please click the button below to continue working without losing your session.</center></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, WARNING_TIME); 
} 

Вот код из родительского окна:

<script language="javascript" type="text/javascript"> 
      var timer = false; 
      window.reportChildActivity = function() { 
       if (timer !== false) { 
        clearTimeout(timer); 
       } 
       //SESSION_ALIVE = true; 
       timer = window.setTimeout(pop_init, SESSION_TIME); 
      } 
    </script> 

Вот код из окна ребенка:

<script type="text/javascript"> 
    $(document).ready(function() { 
     window.parent.reportChildActivity(); 
    }); 
</script> 
<script type="text/javascript"> 
    $(document).bind("mousedown keydown blur", function() {   
      window.parent.reportChildActivity(); 
    }); 

Последний скрипт запускается в файле (файл ascx VB.NET), который строит параметры заголовка/меню для каждой страницы нашей системы.

Последняя строка в функции pop_init, очевидно, должна перезапускать таймер, но по какой-то причине она, похоже, не работает.

Спасибо за любую помощь и понимание, которые у вас могут быть.

Забыл добавить свой код для session_refresh функции:

function session_refresh() { 
    SESSION_ALIVE = true; 
    $(".buttons").hide(); 
    $("#popup_message").html("<center><br />Thank you! You may now resume using the system.<br /></center>"); 
    window.setTimeout(popup_remove, 1000); 
    $("#popup_window").fadeOut("slow", function() { $('#popup_window,#popup_overlay').trigger("unload").unbind().remove(); }); 
    var timer = false; 
    window.reportChildActivity = function() { 
     if (timer !== false) { 
      clearTimeout(timer); 
     } 
     timer = window.setTimeout(pop_init, SESSION_TIME); 
    } 
} 

ответ

0

Вам необходимо перезапустить таймер после того, как пользователь нажимает на кнопку.

+0

Конечно, извините, я просто забыл включить этот бит кода, но я добавил его сейчас внизу. Как вы можете видеть, последняя строка функции session_refresh перезапускает таймер. – Mike

0

Ну, я, кажется, исправили эту проблему путем изменения этого:

var timer = false; 
    window.reportChildActivity = function() { 
     if (timer !== false) { 
      clearTimeout(timer); 
     } 
     timer = window.setTimeout(pop_init, SESSION_TIME); 
    } 

к этому:

if (timer !== false) { 
      clearTimeout(timer); 
     } 
     timer = window.setTimeout(pop_init, SESSION_TIME); 

мне не нужно повторно объявите функцию reportChildActivity так, как я был.

Смежные вопросы