用户按Enter键时如何触发Tab

Dan*_*oho 1 javascript jquery

我从这里得到了代码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);
Run Code Online (Sandbox Code Playgroud)

我的问题是:

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

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

有任何帮助来改进此脚本以满足我的要求吗?

先感谢您.

丹尼尔

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

Nit*_*har 9

几件事 -

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

    $(this).parents("form").eq(0).find(":input:visible:not(:disabled):not([readonly])"); 
    
    Run Code Online (Sandbox Code Playgroud)
  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});
Run Code Online (Sandbox Code Playgroud)