Имитация нажатия клавиши табуляции с помощью jQuery - PullRequest
26 голосов
/ 09 февраля 2012

У меня есть несколько текстовых полей на .net-странице, и я хочу добиться следующего с помощью jQuery: если пользователь нажимает return, программа должна вести себя «как если бы» он использовал клавишу tab, выбирая следующий элемент. Я попробовал следующий код (и некоторые другие):

<script type="text/javascript">

jQuery(document).ready(function () {

    $('.tb').keypress(function (e) {
        if (e.keyCode == 13)
        {
            $(this).trigger("keydown", [9]);
            alert("return pressed");
        } 
    });
});

<asp:TextBox ID="TextBox1" runat="server" CssClass="tb"></asp:TextBox>
<asp:TextBox ID="TextBox2" runat="server" CssClass="tb"></asp:TextBox>

но это просто не работает! Пропустить что-то, сделать ошибку?

Вот некоторые ссылки, которые я использовал

здесь

и здесь

Ответы [ 4 ]

17 голосов
/ 09 февраля 2012

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

http://jsbin.com/ofexat

$('.tg').bind('keypress', function(event) {
  if(event.which === 13) {
    $(this).next().focus();
  }
});

или версия цикла: http://jsbin.com/ofexat/2

11 голосов
/ 11 сентября 2013

Я создал простой плагин jQuery , который решает эту проблему. Он использует селектор «: tabbable» пользовательского интерфейса jQuery, чтобы найти следующий элемент «tabbable» и выбрать его.

Пример использования:

// Simulate tab key when enter is pressed           
$('.tb').bind('keypress', function(event){
    if(event.which === 13){
        if(event.shiftKey){
            $.tabPrev();
        }
        else{
            $.tabNext();
        }
        return false;
    }
});
9 голосов
/ 31 декабря 2014

Из нескольких ответов я объединил для меня идеальное решение, в котором ввод выступает в качестве вкладки для ввода и выбора и фокусируется на следующем вводе, выделении или текстовой области, в то время как позволяет вводить внутри текстовой области.

 $("input,select").bind("keydown", function (e) {
     var keyCode = e.keyCode || e.which;
     if(keyCode === 13) {
         e.preventDefault();
         $('input, select, textarea')
         [$('input,select,textarea').index(this)+1].focus();
     }
 });
4 голосов
/ 09 февраля 2012

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

$(this).trigger({
    type: 'keypress',
    which: 9
});
...