第一次用户扩展会话后,Jquery超时代码不会重新运行

时间:2010-09-03 18:43:38

标签: javascript jquery timeout parent-child

我编写了一个Jquery函数,在一定程度的不活动后使屏幕变黑,创建一个弹出窗口,允许用户单击按钮以保持登录状态,并将其记录下来(关闭应用程序窗口)不要及时回应。

环境是ASP.NET(VB)。我们在技术上不使用母版页,但是我们确实有一个父页面,我们的页眉,页脚和导航驻留在其中,我的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();
    });

最后一个脚本在一个文件(VB.NET ascx文件)中运行,该文件为我们系统中的每个页面构建标题/菜单选项。

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 个答案:

答案 0 :(得分:1)

答案 1 :(得分:0)

您需要在用户点击按钮后重新启动计时器。

答案 2 :(得分: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函数。