2013-03-09 6 views
8

Следующий пример кода выводит сообщение «keydown» много раз, пока я удерживаю кнопку нажатой. Документы says показывают, что событие keydown происходит один раз для одного нажатия кнопки. Таким образом, событие keydown работает как событие нажатия клавиши в следующем примере.Почему событие «keydown» работает как событие «keypress»?

<!DOCTYPE HTML> 
<html> 
    <head> 
    <meta http-equiv="content-type" content="text/html; charset=utf-8"> 
    <title></title> 

    <script type='text/javascript' src='jquery.js'></script> 
    <script type='text/javascript'> 
    function onLoad() 
    { 
     $('#text').on('keydown', function() { console.info('keydown') }); 
    } 
    </script> 

    </head> 
    <body onload='onLoad()'> 
    <input type='text' id='text'> 

    </body> 
</html> 

Я тестировал его на Windows, Firefox 19.0.2 и Google Chrome 25.0.1364.152. Также я создал fiddle (проблема может быть воспроизведена). Версии JQuery, для которых воспроизводится проблема: 1.8.2, 1.9.1.

Обновление.

Я осознал проблему: How can I avoid autorepeated keydown events in JavaScript?.

+0

Что вы подразумеваете под '' keydown «событие работает как событие« keypress »??? – Sarfraz

+0

Когда вы удерживаете кнопку клавиатуры, он запускает событие push для каждого нового символа, который он пишет, потому что считается новым 'keypress'. – deadlock

+0

@Sarfraz Я благодарю, что событие keydown запускается только один раз, когда я нажимаю кнопку. Например. событие KeyUp запускается только один раз, когда я отпускаю кнопку, и я благодарю, что это только факт нажатия кнопки. – sergzach

ответ

20

Событие keydown происходит, когда нажимается клавиша, а затем сразу происходит событие keypress. Тогда событие keyup генерируется при отпускании ключа.

Чтобы понять разницу между keydown и keypress, полезно понять разницу между «символом» и «ключом». «Ключ» - это физическая кнопка на клавиатуре компьютера, а «символ» - это символ, набранный нажатием кнопки. Теоретически события keydown и keyup представляют собой клавиши, которые нажимаются или отпускаются, а событие keypress представляет собой типизируемый символ. Реализация теории не одинакова во всех браузерах.

+4

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

+3

@JesseEarle Мы только что поняли, что keydown также будет срабатывать многократно. – sergzach

+0

FYI ссылка выше теперь ссылается на сайт спама. – tyelford

1

Событие keydown происходит, когда клавиша нажата, а затем сразу после нажатия клавиши.

1

я есть ответ здесь, следуя за мной медленно: keydown: работает, когда вы начинаете набирать ключ или начинаете что-то менять, а keydown дает один результат для одного нажатия, но дает результат до последнего не последним результатом. keyup: работает, когда вы перестаете набирать ключ или возвращаетесь (измените что-то вроде удаления символа), и он даст вам последний результат. : работает, когда вы начинаете вводить текст, но не начинаете что-то менять, а keydpress дает один результат для одного нажатия, но дает результат до последнего, который (lastResult-1)

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