【问题标题】:Global Javascript timer not resetting from button click全局 Javascript 计时器未从按钮单击重置
【发布时间】:2017-05-09 15:54:14
【问题描述】:

我在一个 MVC 应用程序中工作,我遇到了一个全局 javascript 计时器问题,如果他们的会话过期,它将把用户发送到登录页面。设置计时器并让它执行注销功能可以正常工作,但我尝试设置单击功能应重置计时器(以尝试防止计时器过早关闭用户的会话)我不确定我是什么做错了。

_Layout.csthml 中的代码

<script>
//session end
var sessionTimer = 0;
var sessionTimeoutWarning = @Session.Timeout- 1;
var sTimeout = parseInt(sessionTimeoutWarning) * 60 * 1000;

function SessionEnd() {
    document.getElementById('logoutForm').submit();
}
function SetTimer() {
    ClearTimer();
    sessionTimer = setInterval('SessionEnd()', sTimeout);
};
function ClearTimer() {
    clearInterval(sessionTimer);
};
$('body').on('click', function () {
        ClearTimer();
});
$(document).ready(function () {
    SetTimer();
});

Web.config 中的相关代码:

<sessionState timeout="2"></sessionState>

编辑:我现在意识到它表明我只是在单击按钮时清除计时器。我只是想在每次尝试重置之前看看它是否真的会清除它。

【问题讨论】:

  • 你清除它,但你不重新启动它...
  • 是的,我首先测试它甚至可以清除计时器,但它没有这样做。这是主要问题;由于某种原因,计时器在单击按钮时未清除。
  • 好吧,您在点击正文时调用它,....点击事件是否到达正文?按钮是否阻止点击到达它?
  • 正如预期的那样,每次点击都会触发该事件。它实际上并没有清除计时器。因此,每次一分钟后,都会调用注销方法。
  • 好吧,你不应该使用 setInterval(),而应该使用 setTimeout()。如果你说ClearTimer 被调用,我会怀疑你有不止一个计时器被以某种方式触发。

标签: javascript c# jquery model-view-controller timer


【解决方案1】:

看起来问题出在 _Layout 中并使用 $('document').ready 来触发 SetTimer。代码在_Index_Layout中,如下:

    <script>
//session end
    if (sessionTimer === undefined)
        var sessionTimer = 0;
    var sessionTimeoutWarning = @Session.Timeout- 1;
    var sTimeout = parseInt(sessionTimeoutWarning) * 60 * 1000;
    SetTimer();

    function SessionEnd() {
        document.getElementById('logoutForm').submit();
    }
    function SetTimer() {
        ClearTimer();
        sessionTimer = setTimeout('SessionEnd()', sTimeout);
    };
    function ClearTimer() {
        clearTimeout(sessionTimer);
    };
    $('body').on('click', function () {
            ClearTimer();
    });
</script>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-28
    相关资源
    最近更新 更多