Подтвердить что ты не робот

JQuery: keyup для TAB-ключа?

Итак, у меня возникли проблемы с запуском моего script, если нажата клавиша Tab. После некоторого быстрого googling, charcode для Tab - 9. Также, когда мы говорим, есть ли лучшие способы проверки, нажата ли клавиша, не используя символы charcodes? Я спрашиваю, потому что я продолжаю получать следующее предупреждение от 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). Конечно, я пробовал делать вещи вместо того, чтобы записывать текст, но ничего не выполняется. Так может ли кто-нибудь понять, почему это не работает? Есть ли лучший способ проверить, нажата ли клавиша?

Спасибо заранее.

4b9b3361

Ответ 1

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

 $('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;
   }

});

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

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

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

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

Ответ 2

e = e || window.event;
if(e.keyCode == 9)
 alert("Tab pressed");

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

Ответ 3

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

console.log($('/* my inputs */').length);