Javascript-форум (https://javascript.ru/forum/)
-   Javascript под браузер (https://javascript.ru/forum/css-html/)
-   -   Табуляция в форме (https://javascript.ru/forum/css-html/22263-tabulyaciya-v-forme.html)

kyivprogs 12.10.2011 20:51

Табуляция в форме
 
Здравствуйте! Помогите решить алгоритм. есть форма:
<form name="registr" id="registr">
<input type="text" name="key1" id="key1" maxlength="6">
<input type="text" name="key2" id="key2" maxlength="6">
<input type="text" name="key3" id="key3" maxlength="6">
<input type="submit"
</form>

как сделать так, что если при вводе 6 символов в первое поле курсор автоматически переводился во второе поле, если я ввел 6 символов во второе поле курсор сразу переходил на третье. А если я удалил символы ис третего поля то чтоб курсор переходил на второе....
Я так понимаю задача состоит в установке фокуса и создания елементов масива полей ввода??? Или что то другое....
Заранее спасибо

melky 12.10.2011 22:06

по событию нажатия клавиши делаем ветвление, в котором решаем что делать - фокусить следующий элемент, если длина текущего равна максимальной, или фокусить предыдущий, если длина значения текущего равна нулю :

// вернуть элемент по его id. для укорочения кода
var $ = function(a) {return document.getElementById(a)}, 
    // определение ie
    ie = /*@cc_on!@*/0,
    // максимальная длина
    maxlength = 6,
    //поля, по которым будет туда-сюда двигаться курсор 
    inputs = [$('key1'), $('key2'), $('key3')],
    // на каком поле находится сейчас, в данный момент
    curr = 0;

// onkeydown регистрирует нажатие клавиши даже, если вы её зажали и не отпускали
$("registr").onkeydown = function(e) {
    // элемент, в который вводят текст
    e = ie?event.srcElement:e.target;
    
    // если ввели текст, равный ограничению
    e.value.length==maxlength &&
        // и мы можем передвигать указатель вперёд (вправо)
        inputs[curr+1] &&
            // то делаем это
            inputs[ ++curr ].focus();
    
    // если же длина достигла нуля
    !e.value.length &&
        // и мы можем двигаться назад (влево)
        inputs[curr-1] &&
            // то делаем это
            inputs[ --curr ].focus();
        
    
}


демо
<form name="registr" id="registr">
    <input type="text" name="key1" id="key1" maxlength="6">
    <input type="text" name="key2" id="key2" maxlength="6">
    <input type="text" name="key3" id="key3" maxlength="6">
</form>
<script>
var $ = function(a) {return document.getElementById(a)},
    ie = /*@cc_on!@*/0,
    maxlength = 6,
    inputs = [$('key1'), $('key2'), $('key3')],
    curr = 0;

$("registr").onkeydown = function(e) {
    
    e = ie?event.srcElement:e.target;
    
    e.value.length==maxlength &&
        inputs[curr+1] &&
            inputs[ ++curr ].focus();
    
    !e.value.length &&
        inputs[curr-1] &&
            inputs[ --curr ].focus();
        
    
}
</script>

kyivprogs 12.10.2011 22:33

Спасибо, большое за решенный пример. А то я изучаю джава скрипт Библия пользувателя и понимаю что там не все написано... К примеру с var $ = function(a) впервые столкнулся... В библии про это не написано.... Огромное спасибо!


Часовой пояс GMT +3, время: 13:32.