我有一个页面将根据 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/