javascript - 从 setTimeout 调用时 window.event 失败

标签 javascript events settimeout

我有一个页面将根据 cookie 的值执行操作。当页面加载时,我想通过按住 Shift 键来停止这些操作。

function checkForShift() {
    if (window.event.shiftKey) {
        alert('Shift key detected, aborting');
        return false
    }
    else {
        //do stuff
    }
}

这非常有效,除非我从 setTimeout() 函数调用 checkForShift() 。就像这样:

setTimeout ( "checkForShift()" , 500 );

在这种情况下,checkForShift() 函数会在 500 毫秒后调用,但下一行失败并显示以下消息:

Unable to get property 'shiftKey' of undefined or null reference

为什么从 setTimeout() 调用时未定义?

最佳答案

该事件仅在发生时才有效(并且不要使用 window.event,而是将 event 提供给事件处理回调)。

为了正确实现你想要的,你必须通过检测状态的变化来存储状态:

var shiftKeyDown = false;
window.onkeydown = function(e){
    shiftKeyDown = !!(e||window.event).shiftKey;
}
window.onkeyup = function(){
    shiftKeyDown = false;
}
function checkForShift() {
    if (shiftKeyDown) {
        alert('Shift key detected, aborting');
    } else {
        //do stuff
    }
}

当你调用setTimeout时,不要传递字符串而是函数:

setTimeout (checkForShift , 500 );

关于javascript - 从 setTimeout 调用时 window.event 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18620209/

相关文章:

javascript - 如何重置按钮单击时的下拉菜单

JavaScript 事件术语

node.js - 为什么 `setTimeout` 在 Node.js 中不会重复出现?

javascript - 函数内的 AngularJS 摘要

javascript - jQuery/JS setTimeout() 在调用clearTimeout()后仍然运行

javascript - 设置超时问题

javascript - 如何在 react 中的两个组件之间移动项目

javascript - 纯 CSS 方法在显示 :table element? 内保持图像比例

javascript - Bug - 滑出菜单脚本

javascript - 为什么 onload 事件不能作为我的 DIV 的事件起作用?