在setInterval中访问window.event.altkey

时间:2015-02-11 18:00:03

标签: javascript setinterval intervals alt-key

我有以下代码:

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

2 个答案:

答案 0 :(得分:0)

如果我误解了您的需求,请告诉我,但如果您想在按键时触发警报,则需要为onkeydown创建事件监听器

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

答案 1 :(得分:0)

首先,event.altKey只能在 keypress (输入)事件中检测到,例如keydownkeyup。但是,从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()将向下或向上返回,则间隔仍将测试。只有当用户点击 alt 时,才会触发警报。

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