JQuery: ключ для клавиши TAB? - PullRequest
       6

JQuery: ключ для клавиши TAB?

37 голосов
/ 21 января 2011

Итак, у меня возникли проблемы с запуском скрипта, если нажата клавиша Tab.После некоторого быстрого поиска в Google код для Tab равен 9. Кроме того, пока мы говорим, есть ли более эффективные способы проверки, нажата ли клавиша без использования кодов?Я спрашиваю, потому что я продолжаю получать следующее предупреждение от firebug при использовании charcode:

Свойство charCode события keyup не должно использоваться.Значение не имеет смысла.

В любом случае, оно все еще работает, так что это не проблема.Это код, который я использую:

$('/* my inputs */').keyup(function(e) {
   console.log('keyup called');
   var code = e.keyCode || e.which;
   if (code == '9') {
     console.log('Tab pressed');
   }
});

Используя приведенный выше код, консоль оставлена ​​пустой, ничего не добавляется (с помощью Firebug).Конечно, я пытался делать что-то вместо записи текста, но ничего не выполняется.Так кто-нибудь может понять, почему это не работает?Есть ли лучший способ проверить, нажата ли клавиша?

Заранее спасибо.

Ответы [ 3 ]

73 голосов
/ 21 января 2011

Я догадываюсь, что когда вы нажимаете клавишу табуляции, ввод вашей формы теряет фокус, прежде чем произойдет нажатие клавиши. Попробуйте изменить привязку к телу, например так:

 $('body').keyup(function(e) {
    console.log('keyup called');
    var code = e.keyCode || e.which;
    if (code == '9') {
    alert('Tab pressed');
    }
 });

Затем, если это работает (это работает для меня), попробуйте изменить привязку вместо keyDown и вернуть false. Таким образом, вы можете реализовать свое собственное поведение.

$('.yourSelector').keydown(function(e) {
   console.log('keyup called');
   var code = e.keyCode || e.which;
   if (code == '9') {
     alert('Tab pressed');

   return false;
   }

});

Один из этих двух должен работать ... если это тело, вы можете прикрепить обработчик нажатия клавиш к телу, затем, если это вкладка, найти поле с фокусом (я думаю, что есть функция .hasFocus ()?), И если это тот, который вы хотите, продолжить и вернуть ложь. В противном случае, пусть браузер сделает свое дело.

Если вы хотите обновить поле с помощью символа табуляции, попробуйте это в вашем обратном вызове:

var theVal = $(this).val();
theVal = theVal + ' ';
$(this).val(theVal);

Не проверял, но это должно работать. Вы также можете добавить 3 или 4 пробела вместо символа табуляции, если это доставляет вам проблемы.

1 голос
/ 21 января 2011
e = e || window.event;
if(e.keyCode == 9)
 alert("Tab pressed");

Попробуйте это

0 голосов
/ 21 января 2011

если ничего не происходит независимо от того, какую клавишу вы нажимаете, возможно, что-то не так с селектором, который вы используете?Можете ли вы проверить, правильно ли вы выбираете, возможно, что-то вроде:

console.log($('/* my inputs */').length);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...