Javascript jQueryAccordion中的表单:如何获取tab键以打开下一个选项卡?
我有一个对话框,其中的一个表单在一个手风琴中拆分为多个选项卡(请参见示例)。现在,当用户在First Name字段中并点击tab键转到下一个字段时,它会将焦点移动到ok按钮;我想看到的是,选项卡2打开并聚焦于地址行1。有没有一种优雅的方法可以做到这一点,或者我必须编写自己的按键处理程序 谢谢 来自fiddle的HTML代码: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>
<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')。大小();
如果(计算)