Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
全局Javascript计时器未从按钮单击重置_Javascript_C#_Jquery_Model View Controller_Timer - Fatal编程技术网

全局Javascript计时器未从按钮单击重置

全局Javascript计时器未从按钮单击重置,javascript,c#,jquery,model-view-controller,timer,Javascript,C#,Jquery,Model View Controller,Timer,我在一个MVC应用程序中工作,我遇到了一个全局javascript计时器的问题,如果用户的会话过期,它会将用户发送到登录页面。设置计时器并让它执行注销功能工作正常,但我尝试设置单击功能应重置计时器(以尝试并防止计时器过早关闭用户会话),我不确定我做了什么错误 _Layout.csthml中的代码 <script> //session end var sessionTimer = 0; var sessionTimeoutWarning = @Session.Timeout- 1; v

我在一个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();
});

//会话结束
var sessionTimer=0;
var sessionTimeoutWarning=@Session.Timeout-1;
var sTimeout=parseInt(sessionTimeoutWarning)*60*1000;
函数SessionEnd(){
document.getElementById('logoutForm').submit();
}
函数SetTimer(){
ClearTimer();
sessionTimer=setInterval('SessionEnd()',sTimeout);
};
函数ClearTimer(){
clearInterval(会话时间);
};
$('body')。在('click',函数(){
ClearTimer();
});
$(文档).ready(函数(){
SetTimer();
});

Web.config中的相关代码:

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


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

看起来问题在于在_布局中使用$('document')。准备触发SetTimer。代码位于_Index_布局中,如下所示:

    <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>

//会话结束
if(sessionTimer==未定义)
var sessionTimer=0;
var sessionTimeoutWarning=@Session.Timeout-1;
var sTimeout=parseInt(sessionTimeoutWarning)*60*1000;
SetTimer();
函数SessionEnd(){
document.getElementById('logoutForm').submit();
}
函数SetTimer(){
ClearTimer();
sessionTimer=setTimeout('SessionEnd()',sTimeout);
};
函数ClearTimer(){
clearTimeout(sessionTimer);
};
$('body')。在('click',函数(){
ClearTimer();
});

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