Javascript 从setTimeout调用window.event时失败
我有一个页面,它将根据cookie的值执行操作。当页面加载时,我想通过按住shift键来停止这些操作Javascript 从setTimeout调用window.event时失败,javascript,events,settimeout,Javascript,Events,Settimeout,我有一个页面,它将根据cookie的值执行操作。当页面加载时,我想通过按住shift键来停止这些操作 function checkForShift() { if (window.event.shiftKey) { alert('Shift key detected, aborting'); return false } else { //do stuff } } 这非常有效,除非我从setTimeout()函数调用
function checkForShift() {
if (window.event.shiftKey) {
alert('Shift key detected, aborting');
return false
}
else {
//do stuff
}
}
这非常有效,除非我从setTimeout()函数调用checkForShift()。像这样:
setTimeout ( "checkForShift()" , 500 );
在这种情况下,500毫秒后调用checkForShift()函数,但下一行失败并显示以下消息:
Unable to get property 'shiftKey' of undefined or null reference
为什么从setTimeout()调用时未定义它?没有
事件
或窗口。事件
来自setTimeout
回调。您必须使用onkeydown
和onkeydup
自行检测换档键
// Modified version of dystroy's code
var shiftKeyDown = false;
function setShift(e) {
e = e || window.event; // For IE < 9
shiftKeyDown = !!e.shiftKey;
}
function checkForShift() {
if (shiftKeyDown) {
alert('Shift key detected, aborting');
} else {
//do stuff
}
}
window.onkeydown = window.onkeyup = setShift;
setTimeout(checkForShift, 500);
//dystroy代码的修改版本
var shiftKeyDown=错误;
功能设置换档(e){
e=e | | window.event;//对于IE<9
shiftKeyDown=!!e.shiftKey;
}
函数checkForShift(){
如果(shiftKeyDown){
警报(“检测到Shift键,正在中止”);
}否则{
//做事
}
}
window.onkeydown=window.onkeydup=setShift;
设置超时(checkForShift,500);
没有事件
或窗口。事件
来自设置超时
回调。您必须使用onkeydown
和onkeydup
自行检测换档键
// Modified version of dystroy's code
var shiftKeyDown = false;
function setShift(e) {
e = e || window.event; // For IE < 9
shiftKeyDown = !!e.shiftKey;
}
function checkForShift() {
if (shiftKeyDown) {
alert('Shift key detected, aborting');
} else {
//do stuff
}
}
window.onkeydown = window.onkeyup = setShift;
setTimeout(checkForShift, 500);
//dystroy代码的修改版本
var shiftKeyDown=错误;
功能设置换档(e){
e=e | | window.event;//对于IE<9
shiftKeyDown=!!e.shiftKey;
}
函数checkForShift(){
如果(shiftKeyDown){
警报(“检测到Shift键,正在中止”);
}否则{
//做事
}
}
window.onkeydown=window.onkeydup=setShift;
设置超时(checkForShift,500);
事件仅在发生时有效(不要使用window.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 );
事件仅在发生时有效(并且不使用
window.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 );
事件处理循环完成后,浏览器引擎将删除
事件
对象
由于setTimeout
始终是异步的,因此事件对象不再可用
此外,window.event
属性不是跨浏览器的。您应该为此使用事件库或编写自己的跨浏览器事件包装器
function (e) {
if (!e) { e = window.event; }
// do whatever you want with event object
}
事件处理循环完成后,浏览器引擎将删除
事件
对象
由于setTimeout
始终是异步的,因此事件对象不再可用
此外,window.event
属性不是跨浏览器的。您应该为此使用事件库或编写自己的跨浏览器事件包装器
function (e) {
if (!e) { e = window.event; }
// do whatever you want with event object
}
如何正常调用
checkForShift
?如何正常调用checkForShift
?您说过不要使用窗口。事件
,但您使用了它@胡安曼德斯:那显然是个打字错误。Fixed.e参数不适用于所有浏览器。你需要跨浏览器检查它。简单问题。。。艾美?你可能猜到了。据我所知,跨浏览器的方式是做函数处理程序(e){e=e | | window.event}
。我相信IE9是第一个不需要窗口的。event
你说不要使用窗口。event
但是你使用了它@胡安曼德斯:那显然是个打字错误。Fixed.e参数不适用于所有浏览器。你需要跨浏览器检查它。简单问题。。。艾美?你可能猜到了。据我所知,跨浏览器的方式是做函数处理程序(e){e=e | | window.event}
。我相信IE9是第一个不需要window.event