我正在尝试在此处设置用户空闲超时。一切似乎都可以正常工作... clearTimeout函数除外。事件起作用,setTimeout起作用,但是无论我做什么,一旦我第一次设置它,就无法停止它。从我的主控制器的onBeforeRendering函数调用方法。调试器无可见错误。有帮助吗?
setTimeOut: function () {
var self = this;
var timeOut = function userTimeout() {
jQuery.sap.log.error("TIMEOUT");
try {
if (self.getModel("Global").getProperty("/RecordUnlocked") === true) {
self._unlockRecord();
}
} catch(e) {
jQuery.sap.log.error("TIMEOUT");
};
try {
var navHistory = self.getView().getModel("Global").getProperty("/NavHistory");
history.go(navHistory);
} catch(e) {
jQuery.sap.log.error("TIMEOUT");
}
/* MessageBox.show(self.getModel("i18n").getResourceBundle().getText("timeOut"), {
onClose: function(oAction) {*/
};
function reset() {
clearTimeout(timeOut);
setTimeout(timeOut, 20000);
}
document.onmousemove = reset;
document.onkeypress = reset;
}
答案 0 :(得分:0)
window.clearTimeout
清除window.setTimeout
的返回值,而不是您在超时本身中正在执行的函数。
您拥有的timeout
变量实际上不是setTimeout
函数的结果,而是您定义的函数。
通常,类似
var myTimeoutFunction = _ => console.log('hi');
var myTimeout = window.setTimeout(myTimeoutFunction, 20000);
window.clearTimeout(myTimeout);
警告一下,您自己的功能也称为setTimeout
。在鼠标和键事件的回调中执行哪一个取决于当前上下文。我猜您在这里很幸运,因为该事件将在窗口上下文中运行,但是如果您绑定了函数或其他东西,可能会造成混淆