如何将焦点移动到jQuery的下一个input?

我正在使用jQuery自动完成插件,它工作正常。 但是,在IE中,当用户在自动完成中select一个项目时,焦点不会移动到下一个input字段。 它自然在Firefox中起作用。 该插件没有内置的解决scheme,但确实提供了“选项”。 有没有办法强制它移动到下一个input字段?

你可以做这样的事情:

$("input").change(function() { var inputs = $(this).closest('form').find(':input'); inputs.eq( inputs.index(this)+ 1 ).focus(); }); 

在这里发布的其他答案可能不适合你,因为它们依赖于下一个input是下一个兄弟元素,而往往不是这种情况。 这种方法到forms和search下一个inputtypes的元素。

JQuery UI已经有了这个,在我的例子中,如果我input最大字符数,我将包含一个maxchar属性,专注于下一个可聚焦元素(input,select,textarea,button和object)

HTML:

 text 1 <input type="text" value="" id="txt1" maxchar="5" /><br /> text 2 <input type="text" value="" id="txt2" maxchar="5" /><br /> checkbox 1 <input type="checkbox" value="" id="chk1" /><br /> checkbox 2 <input type="checkbox" value="" id="chk2" /><br /> dropdown 1 <select id="dd1" > <option value="1">1</option> <option value="1">2</option> </select><br /> dropdown 2 <select id="dd2"> <option value="1">1</option> <option value="1">2</option> </select> 

Javascript

 $(function() { var focusables = $(":focusable"); focusables.keyup(function(e) { var maxchar = false; if ($(this).attr("maxchar")) { if ($(this).val().length >= $(this).attr("maxchar")) maxchar = true; } if (e.keyCode == 13 || maxchar) { var current = focusables.index(this), next = focusables.eq(current+1).length ? focusables.eq(current+1) : focusables.eq(0); next.focus(); } }); }); 

山姆的意思是:

 $('#myInput').focus(function(){ $(this).next('input').focus(); }) 

尝试使用类似于:

  var inputs = $(this).closest('form').find(':focusable'); inputs.eq(inputs.index(this) + 1).focus(); 

为什么不简单地只是给你想要跳转到一个id的input字段,并做一个简单的焦点

 $("#newListField").focus(); 

你可以张贴一些你的HTML作为例子吗?

同时,试试这个:

 $('#myInput').result(function(){ $(this).next('input').focus(); }) 

这是未经testing的,所以它可能需要一些调整。

我只是写了一个jQuery插件,做你正在寻找(烦恼,我找不到自己的解决scheme(tabStop – > http://plugins.jquery.com/tabstop/

  function nextFormInput() { var focused = $(':focus'); var inputs = $(focused).closest('form').find(':input'); inputs.eq(inputs.index(focused) + 1).focus(); } 

如果您在脚本中使用event.preventDefault(),则将其注释掉,因为IE不喜欢它。

最简单的方法是将它从标签索引中一起移除:

 $('#control').find('input[readonly]').each(function () { $(this).attr('tabindex', '-1'); }); 

我已经使用了几种forms。

这是在我的情况下工作。 性能密集程度可能会降低。

 $('#myelement').siblings('input').first().focus(); 
 var inputs = $('input, select, textarea').keypress(function (e) { if (e.which == 13) { e.preventDefault(); var nextInput = inputs.get(inputs.index(this) + 1); if (nextInput) { nextInput.focus(); } } }); 

使用eq来获得特定的元素。

有关索引的文档

 $("input").keyup(function () { var index = $(this).index("input"); $("input:eq(" + (index +1) + ")").focus(); }); 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> <input type="text" maxlength="1" /> <input type="text" maxlength="1" /> <input type="text" maxlength="1" /> <input type="text" maxlength="1" /> <input type="text" maxlength="1" /> <input type="text" maxlength="1" /> 
 onchange="$('select')[$('select').index(this)+1].focus()" 

如果您的下一个字段是另一个select,这可能会有效