2015-02-11 9 views
0

У меня есть следующий код:Доступ 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), когда пользователь нажимает на optionkey, но вместо этого я получаю груз ошибок: Uncaught TypeError: Cannot read property 'altKey' of undefined

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

Спасибо.

jsfiddle

ответ

0

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

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

Прежде всего event.altKey может быть обнаружен только на keypress (ввод) таких событий, как keydown и keyup. Однако вызов функции из setInterval не приведет к запуску altkey. Вам нужно поймать это в обработчике событий и передать его.

function optionkey() 
 
{ 
 
\t if(window['globalAltKey']) 
 
\t { 
 
\t \t return "down"; 
 
\t } 
 
\t else 
 
\t { 
 
\t \t return "up"; 
 
\t } 
 
} 
 

 
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-клавиша глобально.