События keydown
и keyup
ненадежны для обнаружения определенных символов, поскольку свойство event.which
этих событий , а не кодов символов.
Необходимо использовать событие keypress
. Это событие может срабатывать несколько раз, пока нажата клавиша. Итак, установите флажок при нажатии нужной клавиши и снимите флажок на keyup
.
function something_to_do() {
// This function is fired when * is pressed.
$('<div>Pressed *!</div>').appendTo('body')
}
$('body').keypress(function(e) {
var $this = $(this);
if (e.which === 42) { // '*'.charCodeAt(0) === 42
if (!$this.data('rw_star_pressed')) {
$this.data('rw_star_pressed', true);
something_to_do();
}
}
}).keyup(function() {
$(this).removeData('rw_star_pressed');
});