Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQueryAccordion中的表单:如何获取tab键以打开下一个选项卡?_Javascript_Jquery_Html_Jquery Ui_Jquery Ui Accordion - Fatal编程技术网

Javascript jQueryAccordion中的表单:如何获取tab键以打开下一个选项卡?

Javascript jQueryAccordion中的表单:如何获取tab键以打开下一个选项卡?,javascript,jquery,html,jquery-ui,jquery-ui-accordion,Javascript,Jquery,Html,Jquery Ui,Jquery Ui Accordion,我有一个对话框,其中的一个表单在一个手风琴中拆分为多个选项卡(请参见示例)。现在,当用户在First Name字段中并点击tab键转到下一个字段时,它会将焦点移动到ok按钮;我想看到的是,选项卡2打开并聚焦于地址行1。有没有一种优雅的方法可以做到这一点,或者我必须编写自己的按键处理程序 谢谢 来自fiddle的HTML代码: <div id=dialog title="My dialog"> <form> <div id=accordion>

我有一个对话框,其中的一个表单在一个手风琴中拆分为多个选项卡(请参见示例)。现在,当用户在First Name字段中并点击tab键转到下一个字段时,它会将焦点移动到ok按钮;我想看到的是,选项卡2打开并聚焦于地址行1。有没有一种优雅的方法可以做到这一点,或者我必须编写自己的按键处理程序

谢谢

来自fiddle的HTML代码:

<div id=dialog title="My dialog">
    <form>
    <div id=accordion>
        <h3>Tab 1</h3>
        <div><table>
            <tr><td><label for=last-edit>Last Name:</label></td><td><input id=last-edit /></td></tr>
            <tr><td><label for=first-edit>First Name:</label></td><td><input id=first-edit /></td></tr>
        </table></div>      
        <h3>Tab 2</h3>
        <div><table>
            <tr><td><label for=add1-edit>Address 1:</label></td><td><input id=add1-edit /></td></tr>
            <tr><td><label for=add2-edit>Address 2:</label></td><td><input id=add2-edit /></td></tr>
        </table></div>      
    </div>
    </form>
</div>
$("#dialog").dialog({
    width: 500,
    autoOpen : true,
    buttons: {
        "Ok" : function() {
            $(this).dialog("close");
        },
        "Cancel" : function() {
            $(this).dialog("close");
        }
    },
});
$('#accordion').accordion({
    heightStyle: "content"
});

是的,您必须使用自己的按键处理程序。这是给你的礼物


是的,您必须使用自己的按键处理程序。这是给你的礼物


是的,您必须使用自己的按键处理程序。这是给你的礼物


是的,您必须使用自己的按键处理程序。这是给你的礼物


这将允许您在面板上的
input
元素之间切换,直到到达最后一个
input
元素。然后,它将打开下一个面板,并在第一个
输入
元素上聚焦。它将继续在这样的循环中工作

$("input").on("keydown", function (e) {
    var code = e.keyCode || e.which;
    if (code == '9') {
        var currentInput = $("input:focus");
        var lastInput = $(".ui-accordion-content-active input").last();
        if (currentInput[0] === lastInput[0]) {
            var accordion = $("#accordion").accordion();
            var current = accordion.accordion("option", "active");
            var maximum = accordion.find("h3").length;
            var next = current + 1 === maximum ? 0 : current + 1;
            accordion.accordion("option", "active", next);
            var active = $(".ui-accordion-content-active[aria-expanded=true] input")[0];
            setTimeout(function () {
                active.focus()
            }, 1);
        }
    }
});

。确定下一个面板的代码来自。我没有用两个以上的面板对此进行测试,但它应该可以工作。

这将允许您在面板上的
输入
元素之间切换,直到到达最后一个
输入
元素。然后,它将打开下一个面板,并在第一个
输入
元素上聚焦。它将继续在这样的循环中工作

$("input").on("keydown", function (e) {
    var code = e.keyCode || e.which;
    if (code == '9') {
        var currentInput = $("input:focus");
        var lastInput = $(".ui-accordion-content-active input").last();
        if (currentInput[0] === lastInput[0]) {
            var accordion = $("#accordion").accordion();
            var current = accordion.accordion("option", "active");
            var maximum = accordion.find("h3").length;
            var next = current + 1 === maximum ? 0 : current + 1;
            accordion.accordion("option", "active", next);
            var active = $(".ui-accordion-content-active[aria-expanded=true] input")[0];
            setTimeout(function () {
                active.focus()
            }, 1);
        }
    }
});

。确定下一个面板的代码来自。我没有用两个以上的面板对此进行测试,但它应该可以工作。

这将允许您在面板上的
输入
元素之间切换,直到到达最后一个
输入
元素。然后,它将打开下一个面板,并在第一个
输入
元素上聚焦。它将继续在这样的循环中工作

$("input").on("keydown", function (e) {
    var code = e.keyCode || e.which;
    if (code == '9') {
        var currentInput = $("input:focus");
        var lastInput = $(".ui-accordion-content-active input").last();
        if (currentInput[0] === lastInput[0]) {
            var accordion = $("#accordion").accordion();
            var current = accordion.accordion("option", "active");
            var maximum = accordion.find("h3").length;
            var next = current + 1 === maximum ? 0 : current + 1;
            accordion.accordion("option", "active", next);
            var active = $(".ui-accordion-content-active[aria-expanded=true] input")[0];
            setTimeout(function () {
                active.focus()
            }, 1);
        }
    }
});

。确定下一个面板的代码来自。我没有用两个以上的面板对此进行测试,但它应该可以工作。

这将允许您在面板上的
输入
元素之间切换,直到到达最后一个
输入
元素。然后,它将打开下一个面板,并在第一个
输入
元素上聚焦。它将继续在这样的循环中工作

$("input").on("keydown", function (e) {
    var code = e.keyCode || e.which;
    if (code == '9') {
        var currentInput = $("input:focus");
        var lastInput = $(".ui-accordion-content-active input").last();
        if (currentInput[0] === lastInput[0]) {
            var accordion = $("#accordion").accordion();
            var current = accordion.accordion("option", "active");
            var maximum = accordion.find("h3").length;
            var next = current + 1 === maximum ? 0 : current + 1;
            accordion.accordion("option", "active", next);
            var active = $(".ui-accordion-content-active[aria-expanded=true] input")[0];
            setTimeout(function () {
                active.focus()
            }, 1);
        }
    }
});

。确定下一个面板的代码来自。我没有用两个以上的面板测试过这个问题,但它应该可以工作。

为了补充Charlie的答案,我做了以下工作。它避免选择隐藏输入,还允许您将+Tab从活动的accordion面板切换到上一个面板,并满足页面加载后添加的任何动态输入:

$("#accordion").on("keydown", "input", function (e) {
    var code = e.keyCode || e.which;
    var count;

    if (code == '9') {
        count = $('#accordion h3').size();
        if (count <= 1) return;

        var currentInput = $("input[type!='hidden']:focus");
        if (e.shiftKey) {
            var firstInput = $(".ui-accordion-content-active input[type!='hidden']").first();
            if (currentInput[0] === firstInput[0]) {
                var accordion = $("#accordion").accordion();
                var current = accordion.accordion("option", "active");
                var prev = current - 1 < 0 ? count : current - 1;
                accordion.accordion("option", "active", prev);
                active = $(".ui-accordion-content-active[aria-expanded=true] input[type!='hidden']").last();
                setTimeout(function () {
                    active.focus();
                }, 1);
            }
        } else {
            var lastInput = $(".ui-accordion-content-active input[type!='hidden']").last();
            if (currentInput[0] === lastInput[0]) {
                var accordion = $("#accordion").accordion();
                var current = accordion.accordion("option", "active");
                var maximum = accordion.find("h3").length;
                var next = current + 1 === maximum ? 0 : current + 1;
                accordion.accordion("option", "active", next);
                active = $(".ui-accordion-content-active[aria-expanded=true] input[type!='hidden']")[0];
                setTimeout(function() {
                    active.focus();
                }, 1);
            }
        }
    }                
});
$(“#手风琴”)。打开(“按键”、“输入”功能(e){
var代码=e.keyCode | | e.which;
var计数;
如果(代码=='9'){
计数=$('#手风琴h3')。大小();

如果(count补充Charlie的答案,我做了以下操作。它避免了选择隐藏输入,还允许您将+Tab从活动的accordion面板切换到上一个面板,并满足页面加载后添加的任何动态输入:

$("#accordion").on("keydown", "input", function (e) {
    var code = e.keyCode || e.which;
    var count;

    if (code == '9') {
        count = $('#accordion h3').size();
        if (count <= 1) return;

        var currentInput = $("input[type!='hidden']:focus");
        if (e.shiftKey) {
            var firstInput = $(".ui-accordion-content-active input[type!='hidden']").first();
            if (currentInput[0] === firstInput[0]) {
                var accordion = $("#accordion").accordion();
                var current = accordion.accordion("option", "active");
                var prev = current - 1 < 0 ? count : current - 1;
                accordion.accordion("option", "active", prev);
                active = $(".ui-accordion-content-active[aria-expanded=true] input[type!='hidden']").last();
                setTimeout(function () {
                    active.focus();
                }, 1);
            }
        } else {
            var lastInput = $(".ui-accordion-content-active input[type!='hidden']").last();
            if (currentInput[0] === lastInput[0]) {
                var accordion = $("#accordion").accordion();
                var current = accordion.accordion("option", "active");
                var maximum = accordion.find("h3").length;
                var next = current + 1 === maximum ? 0 : current + 1;
                accordion.accordion("option", "active", next);
                active = $(".ui-accordion-content-active[aria-expanded=true] input[type!='hidden']")[0];
                setTimeout(function() {
                    active.focus();
                }, 1);
            }
        }
    }                
});
$(“#手风琴”)。打开(“按键”、“输入”功能(e){
var代码=e.keyCode | | e.which;
var计数;
如果(代码=='9'){
计数=$('#手风琴h3')。大小();

如果(count补充Charlie的答案,我做了以下操作。它避免了选择隐藏输入,还允许您将+Tab从活动的accordion面板切换到上一个面板,并满足页面加载后添加的任何动态输入:

$("#accordion").on("keydown", "input", function (e) {
    var code = e.keyCode || e.which;
    var count;

    if (code == '9') {
        count = $('#accordion h3').size();
        if (count <= 1) return;

        var currentInput = $("input[type!='hidden']:focus");
        if (e.shiftKey) {
            var firstInput = $(".ui-accordion-content-active input[type!='hidden']").first();
            if (currentInput[0] === firstInput[0]) {
                var accordion = $("#accordion").accordion();
                var current = accordion.accordion("option", "active");
                var prev = current - 1 < 0 ? count : current - 1;
                accordion.accordion("option", "active", prev);
                active = $(".ui-accordion-content-active[aria-expanded=true] input[type!='hidden']").last();
                setTimeout(function () {
                    active.focus();
                }, 1);
            }
        } else {
            var lastInput = $(".ui-accordion-content-active input[type!='hidden']").last();
            if (currentInput[0] === lastInput[0]) {
                var accordion = $("#accordion").accordion();
                var current = accordion.accordion("option", "active");
                var maximum = accordion.find("h3").length;
                var next = current + 1 === maximum ? 0 : current + 1;
                accordion.accordion("option", "active", next);
                active = $(".ui-accordion-content-active[aria-expanded=true] input[type!='hidden']")[0];
                setTimeout(function() {
                    active.focus();
                }, 1);
            }
        }
    }                
});
$(“#手风琴”)。打开(“按键”、“输入”功能(e){
var代码=e.keyCode | | e.which;
var计数;
如果(代码=='9'){
计数=$('#手风琴h3')。大小();

如果(count补充Charlie的答案,我做了以下操作。它避免了选择隐藏输入,还允许您将+Tab从活动的accordion面板切换到上一个面板,并满足页面加载后添加的任何动态输入:

$("#accordion").on("keydown", "input", function (e) {
    var code = e.keyCode || e.which;
    var count;

    if (code == '9') {
        count = $('#accordion h3').size();
        if (count <= 1) return;

        var currentInput = $("input[type!='hidden']:focus");
        if (e.shiftKey) {
            var firstInput = $(".ui-accordion-content-active input[type!='hidden']").first();
            if (currentInput[0] === firstInput[0]) {
                var accordion = $("#accordion").accordion();
                var current = accordion.accordion("option", "active");
                var prev = current - 1 < 0 ? count : current - 1;
                accordion.accordion("option", "active", prev);
                active = $(".ui-accordion-content-active[aria-expanded=true] input[type!='hidden']").last();
                setTimeout(function () {
                    active.focus();
                }, 1);
            }
        } else {
            var lastInput = $(".ui-accordion-content-active input[type!='hidden']").last();
            if (currentInput[0] === lastInput[0]) {
                var accordion = $("#accordion").accordion();
                var current = accordion.accordion("option", "active");
                var maximum = accordion.find("h3").length;
                var next = current + 1 === maximum ? 0 : current + 1;
                accordion.accordion("option", "active", next);
                active = $(".ui-accordion-content-active[aria-expanded=true] input[type!='hidden']")[0];
                setTimeout(function() {
                    active.focus();
                }, 1);
            }
        }
    }                
});
$(“#手风琴”)。打开(“按键”、“输入”功能(e){
var代码=e.keyCode | | e.which;
var计数;
如果(代码=='9'){
计数=$('#手风琴h3')。大小();
如果(计算)