у нас возникла проблема с этим при использовании в нашем приложении asp.net.Проблема функции javascript AutoTab
Цель этого заключается в следующем:
- Когда в текстовом поле -> вкладка раз MaxLength достигается
- Когда в флажком -> вкладка сразу управления переключается с клавиатуры (пробел)
С помощью кнопок это единственные элементы управления на форме. Функция переключается конечным пользователем (сохраняется с помощью файла cookie).
Вопросы:
Как вы заметите, речь идет о процессе довольно случайным образом. Иногда он выполняется быстро, иногда это не так. В настоящее время мы имеем форму, установленную на данный момент, с очень большим индексом индексов вкладок, который, скорее всего, останется. Не очень беспокоиться об этом, если честно, но приятно, если кто-то знает, что делать.
Функциональность флажка работает очень странно. Скажем, у вас есть CheckBoxA и CheckBoxB. Когда вы используете клавиатуру для переключения CheckBoxA, она выделяет окно, как если бы оно было отключено, и фокусируется на CheckBoxB. В этот момент, если вы используете мышь и щелкните в любом месте документа, она переключает CheckBoxA каждый раз, когда вы нажимаете и игнорируете обычные функции мыши для этой области, пока вы не щелкните правой кнопкой мыши, а затем отмените контекстное меню. Если вы переключаете CheckBoxB после того, как он набирает фокус с AutoTab с помощью клавиатуры, 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();
}
Я извиняюсь, так как это очень длительный (вопрос не что-то, что я знаю об общем имени, хотя я видел поведение раньше), но любая помощь, которую вы можете дать с этой проблемой, будет очень оценена.
Спасибо,