Код тайм-аута Jquery не перезапускается после того, как пользователь впервые расширяет сеанс - PullRequest
0 голосов
/ 03 сентября 2010

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

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

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

Вот моя основная функция 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);
    }
}

Ответы [ 3 ]

1 голос
/ 03 сентября 2010
0 голосов
/ 03 сентября 2010

Что ж, похоже, я решил проблему, изменив это:

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, как раньше.

0 голосов
/ 03 сентября 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...