На веб-странице реализовано множество симуляций событий, реализованных в JS Framework.
Можно ли программно моделировать события нажатия клавиш? для jQuery
Javascript: симуляция клика по ссылке для YUI
Однако , более простой метод состоит в том, что третий пост ссылки, данный Ralf , фокусирует «следующее» текстовое поле относительно свойства tabIndex элементов внутри элемента формы.
Там может быть более блестящий способ, если вы составите список идентификаторов текстового поля и порядок, в котором вы хотите быть.
Конечно, список tabIndex может быть создан не вами, а путем обхода текстового поля.
Создать цикл для генерации списка при загрузке документа (DOMContentLoaded):
var tabIndexList = new Array();
function tabIndexListGeneration(){
var form = document.getElementById("Your form ID"), // remember to fill in your form ID
textfields = form.getElementsByTagName("input"),
textfieldsLength = textfields.length;
for(var i=0;i<textfieldsLength;i++){
if(textfields[i].getAttribute("type") !== "text" || textfields[i].getAttribute("tabIndex") <= 0)continue;
/* tabIndex = 0 is neglected as it places the latest, if you want it, change 0 to -1
* and change tabIndexPointer = 0 into tabIndexPointer = -1 below */
tabIndexList[textfields[i].getAttribute("tabIndex")] = textfields[i];
}
}
// You can use the function of JS Framework if you don't like the method below.
if(document.addEventListener){
document.addEventListener("DOMContentLoaded", tabIndexListGeneration, false);
}else{
window.attachEvent("onload", tabIndexListGeneration);
}
А внутри события «ввод текста равен максимальной длине текстового поля»:
var tabIndexPointer = target.getAttribute("tabIndex"); // target is the DOM object of current textfield
while(!(++tabIndexPointer in tabIndexList)){
if(tabIndexPointer >= tabIndexList.length)
tabIndexPointer = 0; // or other action after all textfields were focused
}
tabIndexList[tabIndexPointer].focus(); // if other action needed, put it right after while ended
Примечание: структура текстовых полей формы не должна быть изменена, в противном случае будет выдана ошибка.
Если текстовое поле генерируется динамически, выполните tabIndexListGeneration()
, чтобы восстановить список.