我们在asp.net应用程序中使用它时遇到了这个问题。
它的目的如下:
除了按钮,这些是表单上的唯一控件。该功能由最终用户切换(使用cookie保存)。
的问题:
正如您将注意到的,它是相当随机的过程。有时它会很快执行,有时则不会。我们目前拥有表单集的方式是具有非常大的选项卡索引范围,该范围很可能保留。说实话,并不是真的担心这个问题,但如果有人知道该怎么做,那就太好了。
Checkbox功能非常奇怪。假设你有CheckBoxA和CheckBoxB。当您使用键盘切换CheckBoxA时,它会将该框灰色,就像它被禁用一样,并将焦点设置为CheckBoxB。此时,如果您使用鼠标并单击文档上的任意位置,则每次单击并忽略该区域的正常鼠标功能时,它都会切换CheckBoxA,直到您右键单击然后取消上下文菜单。如果你在使用键盘从AutoTab获得焦点后切换CheckBoxB,CheckBoxA会丢失禁用的灰色外观(虽然它从未切换过),并且循环重复,CheckBoxB是有问题的。
以下是对该功能很重要的代码。 CheckCookie()是一个检查,以确保用户设置了AutoTab,否则AutoTab不会发生。 Array.contains遍历数组以查找输入的键码是否存在于其中。
function test(input, inputClientID, e) {
if (checkCookie()) {
var acceptedChars = ["48", "49", "50", "51", "52", "53", "54", "55", "56", "57", "65", "66", "67", "68", "69", "70", "71", "72", "73", "74", "75", "76", "77", "78", "79", "80", "81", "82", "83", "84", "85", "86", "87", "88", "89", "90", "96", "97", "98", "99", "100", "101", "102", "103", "104", "105", "106", "107", "108", "109", "110", "111", "186", "187", "188", "189", "190", "191", "192", "219", "220", "221", "222"];
if (input.type == "text") {
len = document.getElementById(inputClientID).getAttribute("MaxLength");
curLen = document.getElementById(inputClientID).getAttribute("Value");
if ((len != null) && (len != "") && (curLen != null) && (curLen != "")) {
if (len <= curLen.length) {
var keycode;
if (window.event) keycode = window.event.keyCode;
if (e.shiftKey == true && keycode == 9) {
return;
}
else if (acceptedChars.contains(keycode)) { //(e.shiftKey == false && keycode != 9)
tabNextCtrl(input);
}
}
}
}
else if (input.type == null) {
if (input.firstChild.type == "checkbox") {
var keycode;
if (window.event) keycode = window.event.keyCode;
if (keycode == 32) {
//if (input.firstChild.checked) {
// input.firstChild.checked = false;
//}
//else {
// input.firstChild.checked = true;
//}
tabNextCtrl(input.firstChild);
}
}
}
}}
标签是在这里使用排序完成的(我相信问题#2的瓶颈在哪里):
function tabNextCtrl(input) {
var tbIndex = input;
var aIndex = 99999999;
for (i = 0; i < input.form.elements.length; i++) {
if ((input.form.elements[i].tabIndex > input.tabIndex) && (input.form.elements[i].tabIndex < aIndex)) {
aIndex = input.form.elements[i].tabIndex;
tbIndex = input.form.elements[i];
}
}
tbIndex.focus();
}
我道歉,因为这是非常冗长的(问题不是我知道有一个共同的名字,虽然我之前已经看到过这种行为),但是你对这个问题给予的任何帮助都将非常感激。< / p>
谢谢,
答案 0 :(得分:1)
答案 1 :(得分:0)
function Tab(currentField, e) {
if (!(e.keyCode == 8 || e.keyCode == 37) ) {
if (currentField.value.length == currentField.maxLength) {
$(currentField).next('input').focus();
}
}
else{
if (currentField.value.length == 0) {
$(currentField).prev('input').focus();
}
}
}
<input name="phone" id="phone" class="input20p" onkeyup='Tab(this,event)' maxlength="3" type="text" border="0">
<input maxlength="3" class="input20p" name="phone1" type="text" border="0" onkeyup='Tab(this,event)'>
<input class="input20p" name="phone2" maxlength="4" type="text" border="0" onkeyup='Tab(this,event)' >