onkeyup при срабатывании клавиш-модификаторов

Кажется, я не могу использовать событие onkeyup, чтобы надежно определить, когда клавиши-модификаторы, в частности, клавиша Alt, отпускаются. Иногда это работает, иногда нет. Однако в большинстве случаев это не так.

Мой текущий код:

document.documentElement.onkeyup = function(e) {
    e = e || window.event;
    if( !e.altKey) {
        // do stuff here
        document.documentElement.onkeyup = null;
    }
}

Возможно, связано с Предотвратить неработающее действие события по умолчанию...? как я m работает в IE9, и появляется всплывающее меню «Файл». Однако я закрываю меню, прежде чем пытаться вызвать событие.


person Niet the Dark Absol    schedule 29.10.2011    source источник
comment
Я хотел сказать, что окно должно быть активным, я полагаю, чтобы зафиксировать ввод ключа. Если клавиша-модификатор имеет другую функцию в веб-браузере, действия клавиш могут быть несогласованными в разных браузерах. В частности, как ALT вызывает меню, или клавиша Win+убирает фокус с браузера.   -  person donutdan4114    schedule 30.10.2011
comment
Вот почему я думаю, что мой другой вопрос (связанный с) актуален, потому что я пытаюсь предотвратить появление меню по умолчанию, но это не работает.   -  person Niet the Dark Absol    schedule 30.10.2011


Ответы (2)


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

person johndodo    schedule 29.10.2011

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

Редактировать: хотя это, кажется, фиксирует событие, я не думаю, что возможно запретить IE выполнять свои собственные события.

person Mike Cluck    schedule 29.10.2011
comment
Извините, но я категорически против использования jQuery или любого другого фреймворка. Назовите меня старомодным, но я пишу свой JavaScript чисто. - person Niet the Dark Absol; 30.10.2011
comment
@Kolink: ‹offtopic› вам стоит попробовать jQuery, после получаса программирования в нем вы никогда не вернетесь назад. Нет, пусть это будет 15 минут. :) ИМХО, конечно. - person johndodo; 30.10.2011
comment
@Kolink Достаточно честно, в этом нет ничего плохого. Вы пытались вызвать e.preventDefault() onkeydown? Это может остановить всплывающее меню. - person Mike Cluck; 30.10.2011
comment
@Neurotrace Я только что попробовал это. Не повезло, меню все еще появляется. - person Niet the Dark Absol; 30.10.2011
comment
@Kolink Извините, я думаю, вам не повезло. Я относительно уверен, что JS не может так переопределить браузер. Этот пост намекает на то, что forums.oracle.com/forums/thread.jspa?threadID =2199650 - person Mike Cluck; 30.10.2011