JQuery: как захватить нажатие клавиши TAB в текстовом поле

Я хочу захватить нажатие клавиши TAB, отменить действие по умолчанию и вызвать мою собственную функцию javascript.

Ответ 1

Изменить: Поскольку ваш элемент динамически вставлен, вы должны использовать делегированный on(), как в вашем примере, но вы должны привязать его к событию keydown, потому что, как комментарии @Marc, в IE событие keypress не захватывает несимвольные ключи:

$("#parentOfTextbox").on('keydown', '#textbox', function(e) { 
  var keyCode = e.keyCode || e.which; 

  if (keyCode == 9) { 
    e.preventDefault(); 
    // call custom function here
  } 
});

Посмотрите пример здесь.

Ответ 2

Рабочий пример в jQuery 1.9:

$('body').on('keydown', '#textbox', function(e) {
    if (e.which == 9) {
        e.preventDefault();
        // do your code
    }
});

Ответ 3

$('#textbox').live('keypress', function(e) {
    if (e.keyCode === 9) {
        e.preventDefault();
        // do work
    }
});

Ответ 4

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

$('#textBox').live('keydown', function(e) {
    if (e.keyCode == 9) {
        e.preventDefault();
        alert('tab');
    }
});

Ответ 5

Важная часть использования вкладки "ключ" на вкладке - это знание того, что вкладка всегда будет пытаться что-то сделать, не забудьте "вернуть false" в конце.

Вот что я сделал. У меня есть функция, которая работает на .blur и функция, которая меняет места, где мой фокус формы. В основном он добавляет ввод в конец формы и идет туда при выполнении вычислений при размытии.

$(this).children('input[type=text]').blur(timeEntered).keydown(function (e) {
        var code = e.keyCode || e.which;
        if (code == "9") {
            window.tabPressed = true;
            // Here is the external function you want to call, let your external
            // function handle all your custom code, then return false to
            // prevent the tab button from doing whatever it would naturally do.
            focusShift($(this));
            return false;
        } else {
            window.tabPressed = false;
        }
        // This is the code i want to execute, it might be different than yours
        function focusShift(trigger) {
            var focalPoint = false;
            if (tabPressed == true) {
                console.log($(trigger).parents("td").next("td"));
                focalPoint = $(trigger).parents("td").next("td");

            }
            if (focalPoint) {
                $(focalPoint).trigger("click");
            }
        }
    });

Ответ 6

Попробуйте следующее:

$('#contra').focusout(function (){
    $('#btnPassword').focus();
});

Ответ 7

Предположим, что у вас есть TextBox с идентификатором txtName

$("[id*=txtName]").on('keydown', function(e) { 
  var keyCode = e.keyCode || e.which; 
  if (keyCode == 9) {
     e.preventDefault();
     alert('Tab Pressed');
 }
}); 

Ответ 8

Вы можете захватить вкладку событий, используя этот JQuery API.

$( "#yourInputTextId" ).keydown(function(evt) {
   if(evt.key === "Tab")
      //call your function
});

Ответ 9

Это сработало для меня:

$("[id*=txtName]").on('keydown', function(e) { var keyCode = e.keyCode || e.which; if (keyCode == 9) { e.preventDefault(); alert('Tab Pressed'); } });