我实现了一个 ResetTime
函数,一旦调用模态框,我就需要停止该函数。 ResetTime
函数用于 session 超时。每次有用户交互时,时间都会重置。
ResetTime
函数
function ResetTime() {
timer = SetLastResetTimeStamp((new Date()).getTime());
}
function SetLastResetTimeStamp(timeStamp) {
if (_localStorage) {
_localStorage[_localStorageKey] = timeStamp;
} else {
_lastResetTimeStamp = timeStamp;
}
}
用户交互检查:
AttachEvent(document, 'click', ResetTime);
AttachEvent(document, 'mousemove', ResetTime);
AttachEvent(document, 'keypress', ResetTime);
AttachEvent(window, 'load', ResetTime);
有没有办法在另一个函数中停止ResetTime
函数?
最佳答案
@Phiter 建议的解决方案可行,即您可以在包含标志 modalIsOpen
的范围中定义 ResetTime
,然后将其定义如下:
function ResetTime() {
if (modalIsOpen) {
return;
}
timer = SetLastResetTimeStamp((new Date()).getTime());
}
但是,我认为在模式打开时分离事件并在模式关闭时重新附加它们会更干净。这将首先阻止该函数被调用。 IE。假设您有两个函数 onModalOpen
和 onModalClose
以及一个 DetachEvent
函数,该函数从相应的 EventTarget
中删除事件:
const onModalOpen = () => {
DetachEvent(document, 'click', ResetTime);
DetachEvent(document, 'mousemove', ResetTime);
DetachEvent(document, 'keypress', ResetTime);
DetachEvent(window, 'load', ResetTime);
// ...
}
const onModalClose = () => {
AttachEvent(document, 'click', ResetTime);
AttachEvent(document, 'mousemove', ResetTime);
AttachEvent(document, 'keypress', ResetTime);
AttachEvent(window, 'load', ResetTime);
// ...
}
<小时/>
注意:解除绑定(bind)和重新绑定(bind)事件处理程序并非没有争议(请参阅 this answer )。
顺便说一句,您无法停止 JavaScript(或大多数编程语言)中的函数。您只能阻止它们执行(例如,通过提前返回、抛出错误或根本不首先调用它们。)
关于javascript - 停止 JavaScript 中的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52282017/