用户按Enter键时如何触发Tab

我从这里得到了代码jquery如何捕获输入密钥并将事件更改为选项卡

(function($) { $.fn.enterAsTab = function(options) { var settings = $.extend({ 'allowSubmit': false }, options); this.find('input, select, textarea, button').live("keypress", {localSettings: settings}, function(event) { if (settings.allowSubmit) { var type = $(this).attr("type"); if (type == "submit") { return true; } } if (event.keyCode == 13) { var inputs = $(this).parents("form").eq(0).find(":input:visible:not(disabled):not([readonly])"); var idx = inputs.index(this); if (idx == inputs.length - 1) { idx = -1; } else { inputs[idx + 1].focus(); // handles submit buttons } try { inputs[idx + 1].select(); } catch (err) { // handle objects not offering select } return false; } }); return this; }; })(jQuery); 

我的问题是:

  1. 我希望这个脚本也适用于select(下拉列表),textarea,按钮[不带type = submit]。 它在textarea上工作得很好,按钮[不是type = submit]但是它不能用于select(下拉列表)。

  2. 我发现在传递禁用的输入时,此脚本无法移动到下一个输入。 例如,我有三个输入,qty,qtyConv和备忘录。 所有这些都是文本字段,但qtyConv被禁用。 当我在数量上并按下回车时,我无法转到备忘录。

有什么帮助来改进这个脚本以满足我的要求吗?

先感谢您。

丹尼尔

解决方案:根据Nitish Dhar的建议使用keydown而不是keypress。

几件事 –

  1. 使用的选择器是错误的。 在查找未禁用的选择器方面定义的选择器是错误的,请使用此选项 –

     $(this).parents("form").eq(0).find(":input:visible:not(:disabled):not([readonly])"); 
  2. Firefox 29.0有一个关于选择输入的按键错误使用keydown而不是 – 由于一个错误(或不是一个错误),选择在firefox中不适合你,当它在选择输入时不听keypress – https: //support.mozilla.org/en-US/questions/998291 。

工作演示http://codepen.io/nitishdhar/pen/Gxbhm (也适用于chrome和FF)

完整的代码

 (function($) { $.fn.enterAsTab = function(options) { var settings = $.extend({ 'allowSubmit': false }, options); $(this).find('input, select, textarea, button').live("keydown", {localSettings: settings}, function(event) { if (settings.allowSubmit) { var type = $(this).attr("type"); if (type == "submit") { return true; } } if (event.keyCode == 13) { var inputs = $(this).parents("form").eq(0).find(":input:visible:not(:disabled):not([readonly])"); var idx = inputs.index(this); if (idx == inputs.length - 1) { idx = -1; } else { inputs[idx + 1].focus(); // handles submit buttons } try { inputs[idx + 1].select(); } catch (err) { // handle objects not offering select } return false; } }); return this; }; })(jQuery); $("#form").enterAsTab({ 'allowSubmit': true});