Доступ к window.event.altkey в setInterval

У меня есть следующий код:

function optionkey()
{
    e = window.event;
    if( e.altKey )
    {
        return "down";
    }
    else
    {
        return "up";
    }
}

interval = setInterval(function(){
    if( optionkey() == "down" ) {
        clearInterval(interval);
        alert( 5 );
    }
}, 100);

В основном код должен работать alert(5) когда пользователь нажимает ключ опции, но вместо этого я получаю множество ошибок: Uncaught TypeError: Cannot read property 'altKey' of undefined

Может кто-нибудь сказать мне, почему он это делает и как это исправить?

Благодарю.

jsfiddle

2 ответа

Пожалуйста, дайте мне знать, если я неверно истолковал ваши потребности, но если вы хотите, чтобы при нажатии клавиши срабатывало оповещение, вам нужно создать прослушиватель событий для onkeydown вот так

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

Прежде всего event.altKey может быть обнаружен только на событиях нажатия клавиш (ввода), таких как keydown а также keyup, Однако вызов функции из 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, это активирует предупреждение.

Я не знаю, почему вы выбрали этот подход, вы можете просто прикрепить обработчик нажатия к кнопке и использовать предоставленное мной событие нажатия клавиши, чтобы проверить, нажата ли клавиша alt глобально.

Другие вопросы по тегам