2010-07-15 2 views
1

У меня есть регулярные OnKeyDown обработчик событий, который стреляет функцию, как это:Непрерывное OnKeyDown событие в Firefox

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

Google chrome предлагает мне непрерывный захват, поэтому я думаю, что это по выбору.

+1

В чем ваш вопрос? –

ответ

1

Вы пробовали мероприятие keypress? Событие keypress запускается после keydown, если ключ удерживается нажатой.

2

Что делать, если вы пытаетесь что-то вроде этого:

var iskeydown = 0; 
var samplecount = 0; 

function onKeyDown() { 
    iskeydown = 1; 
    while (iskeydown) continuous(); 
} 

function onKeyUp() { 
    iskeydown = 0; 
    alert(samplecount); 
} 

function continuous() { 
    samplecount = samplecount + 1; 
} 

window.onkeydown = onKeyDown; 
window.onkeyup = onKeyUp; 

Сделано лучше:

var iskeydown = 0; 
var samplecount = 0; 

function onKeyDown() { 
    iskeydown = 1; 
    continuous(); 
} 

function onKeyUp() { 
    iskeydown = 0; 
    alert(samplecount); 
} 

function continuous() { 
    if (iskeydown == 1) { 
     samplecount = samplecount + 1; 
     setTimeout("continuous()",200); 
    } 
} 

window.onkeydown = onKeyDown; 
window.onkeyup = onKeyUp; 
+0

Не кажется отличной идеей: он будет уделять ненужное внимание среде выполнения JavaScript, может привести к предупреждению «Этот сценарий занимает много времени» и может помешать браузеру обрабатывать новые ключевые события. –

+0

Да .. обновил его, чтобы использовать setTimeout .. – Fosco

1

Я думаю, вы должны использовать Mac или Linux, так как в Windows, Firefox поддерживает автоматическое повторяемая keydown событий. Тем не менее, в других операционных системах вы получаете только автоматические повторные события keypress, когда вы держите клавишу нажатой. В общем, если можно, используйте событие keypress.

Для получения дополнительной информации см. Jan Wolter's excellent article on JavaScript key events.

Смежные вопросы