2009-08-21 5 views

ответ

211

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

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

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

Проверить пример here.

+0

это не работает для меня в IE8 = \ –

+0

, когда я нажимаю TAB в IE6 + событие не срабатывает (оно срабатывает при любом буквенно-цифровом ключе) ... Мне нужно использовать .live ('keypress', fn) –

+0

Если работает только с живым, возможно, вы вставляете свой текстовый элемент динамически, если элемент уже находится на странице, он будет работать, проверьте этот пример: http://jsbin.com/oguhe – CMS

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

Кроме того, чтобы отменить действие по умолчанию, используйте e.preventDefault(); в первой строке функции. –

+0

это не работает для меня в IE6 + –

+0

@Jon, keypress не захватывает нехарактерные ключи в IE – Marc

17

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

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

make 'e.preventDefault();' double, чтобы предотвратить вставку пробелов в текстовое поле , – stil

7

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

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

важной частью с помощью ключа вниз на вкладке зная, что вкладка всегда будет пытаться сделать что-то уже, не забудьте «вернуться ложным» в конце.

Вот что я сделал. У меня есть функция, которая работает на .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"); 
      } 
     } 
    }); 
2

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

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

Предположим, у вас есть TextBox с Id txtName

$("[id*=txtName]").on('keydown', function(e) { 
    var keyCode = e.keyCode || e.which; 
    if (keyCode == 9) { 
    e.preventDefault(); 
    alert('Tab Pressed'); 
} 
}); 
Смежные вопросы