2012-06-13 4 views
8

Привет У меня есть текст ввода автозаполнения. Я пытаюсь запустить событие перепечатки таблицы при нажатии кнопки btn и нажатия клавиши ввода. баттон нажмите отлично работает и но ввести ключ пресс кажется, что срабатывает несколько раз, прежде чем останавливая (то есть таблицу мерцает)jquery keypress event firing несколько раз

$('body').bind('keypress', function(e) { 
     if(e.keyCode==13){ 
      var str = $('#Filter').val(); 
      $('#Table').fadeOut("slow").load('printShorts.server.php?Sortby=<?echo $sort;?>&dir=<?echo $direction;?>&filter='+encodeURIComponent(str)+'&usergroup=<?=$usergroup?>&no-cache=' + (new Date()).getTime()).fadeIn("slow"); 
     } 

}); 

это не происходит все время, и действует differntly в браузерах .. различных

ответ

12

KeyDown событий в сочетании с HTML текстовое поле не будет достаточно, чтобы предотвратить его от увольнения несколько раз. Это поведение можно увидеть в демонстрационном разделе jquery события keydown: http://api.jquery.com/keydown/

Одним из возможных решений является использование обработчика событий «один» (см. http://api.jquery.com/one/). Который обеспечивает событие обрабатывается только один раз:

jQuery("#createNewProduct").one("keydown", function (e) { 
    //Do Stuff 
}); 
+8

спасибо, хороший (получите?:-)) – devmonster

+1

я вижу, что вы там сделали – Dishcandanty

+0

Ahhhh ... Aces! Это заставило меня замолчать! – JustBaron

4

http://api.jquery.com/keypress/

событие нажатия клавиши посылается к элементу, когда браузер регистрирует ввод с клавиатуры. Это похоже на событие keydown, кроме в случае повторений ключей. Если пользователь нажимает и удерживает клавишу, одно событие блокировки запускается один раз, но отдельные события нажатия клавиш - , запускаемые для каждого вставленного символа. Кроме того, клавиши-модификаторы (например, Shift) запускают события смены ключа, но не события нажатия клавиш.

Вместо этого используйте keydown.

7

Это правильное поведение события нажатия клавиш. Событие keypress продолжает стрелять до тех пор, пока ключ не работает (например, если вы удерживаете какую-либо клавишу char нажатой, когда в текстовом поле, char добавляется, что много раз это относится к нажатию клавиши). Для условий «один раз» используйте событие «key-down» или «key-up» в зависимости от вашего требования. Одновременно запускаются как клавиши, так и клавиши. Он выглядит следующим образом:

{Key-Down} {Key-Press} {Key-Press} ..(as long as key is down).. {Key-Press} {Key-Up} 
1

Попробуйте изменить 'keypress' на 'keydown'.

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

От http://api.jquery.com/keypress/

1

документация для нажатия кнопок состояний:

В качестве метода .keypress() это просто сокращение для .on («нажатие клавиши», обработчик), отрыв возможен используя .off ("keypress").

Таким образом, вы можете отсоединить обработчик, добавив .off() перед привязкой. Я бы также заменил функцию .bind() на .on(), так как bind теперь устарел. Что-то вроде этого должно работать:

$('body').off().on('keypress', function(e) { 
Смежные вопросы