在setInterval中访问window.event.altkey

Accessing window.event.altkey in a setInterval

本文关键字:event altkey window 访问 setInterval      更新时间:2023-09-26

我有以下代码:

function optionkey()
{
    e = window.event;
    if( e.altKey )
    {
        return "down";
    }
    else
    {
        return "up";
    }
}
interval = setInterval(function(){
    if( optionkey() == "down" ) {
        clearInterval(interval);
        alert( 5 );
    }
}, 100);

基本上,当用户按下optionkey时,代码应该运行alert(5),但我得到了大量错误:Uncaught TypeError: Cannot read property 'altKey' of undefined

有人能告诉我它为什么会这样做以及如何修复吗?

谢谢。

jsfiddle

如果我误解了你的需求,请告诉我,但如果你想在按键时触发警报,你需要为onkeydown创建一个事件侦听器,就像一样

window.onkeydown = function ( e ) {
    if(e.altKey){
        alert(5);
    }
}

首先,只能在按键(输入)事件(如keydownkeyup)上检测到event.altKey。然而,从setInterval调用函数将不会触发altkey。您需要在事件处理程序中捕获它并将其传递出去

function optionkey()
{
	if( window['globalAltKey'])
	{
		return "down";
	}
	else
	{
		return "up";
	}
}
interval = setInterval(function(){
    if( optionkey() == "down" ) {
        clearInterval(interval);
        alert( 5 );
    }
}, 100);
window.addEventListener("keydown", function(e){
    if (e.altKey)
    {
        globalAltKey = true;
    }
    else
     {
        globalAltKey = false;
    }   
        
    
}, false)

现在,间隔仍将测试optionkey()是返回down还是返回up。只有当用户单击alt时,才会触发警报。

我不知道你为什么选择这种方法,你可以简单地在按钮上附加一个点击处理程序,并使用我提供的keydown事件来检查alt键是否被全局按下。