Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 04.12.2010, 13:45
Интересующийся
Отправить личное сообщение для DmitryOpalev Посмотреть профиль Найти все сообщения от DmitryOpalev
 
Регистрация: 05.11.2010
Сообщений: 22

Ввод номера сотового телефона
Здравствуйте!
У меня есть поля типа
8-<input size='3'>-<input size='3'>-<input size='2'>-<input size='2'>

Как сделать, что при заполнении одного поля, фокус автоматически переходил на следующее?
Ответить с цитированием
  #2 (permalink)  
Старый 04.12.2010, 14:18
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

Вы просите готовый скрипт с нуля.

Это работа, и за нее обычно платят деньги.
Для таких сообщений предназначен раздел форума "Работа".

Если вы все же хотите, чтобы вам помогли - приложите какие-то усилия сами и задавайте вопросы по ходу дела.
Ответить с цитированием
  #3 (permalink)  
Старый 04.12.2010, 14:51
Интересующийся
Отправить личное сообщение для DmitryOpalev Посмотреть профиль Найти все сообщения от DmitryOpalev
 
Регистрация: 05.11.2010
Сообщений: 22

Цитата:
Это работа, и за нее обычно платят деньги.
да
Мне надо чтоб вы мне показали, что надо расммотреть (функцию или еще что)
Ответить с цитированием
  #4 (permalink)  
Старый 04.12.2010, 14:57
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

используйте события onchange для первого элемента, и когда его свойство value(являющееся его содержимым) достигнет нужной вам длины, вызовите метод focus() у соответсвующегго элемента
Ответить с цитированием
  #5 (permalink)  
Старый 04.12.2010, 15:08
Аватар для Vulkan
Профессор
Отправить личное сообщение для Vulkan Посмотреть профиль Найти все сообщения от Vulkan
 
Регистрация: 25.05.2010
Сообщений: 511

Вот вам решение, подстраивайте под свою страничку:
<script>
window.onload=function(){
var inputs=document.getElementsByTagName('input');
for(i=0; i<inputs.length; i++) inputs[i].onkeydown='verifyLength(this, '+i+')';
}

function verifyLength(input, order){
var inputs=document.getElementsByTagName('input');
if(input.size==input.value.length) inputs[order+1].focus();
}
</script>

8 -<input size="3"> -<input size="3"> -<input size="2"> -<input size="2">

Последний раз редактировалось Vulkan, 04.12.2010 в 15:26.
Ответить с цитированием
  #6 (permalink)  
Старый 04.12.2010, 15:28
Особый гость
Посмотреть профиль Найти все сообщения от monolithed
 
Регистрация: 02.04.2010
Сообщений: 4,260

Как-то так:
<script type="text/javascript">
window.onload = function(){
    var input = document.getElementsByName('input'), i = input.length;
    while(i--){
        input[i].onkeyup = (function(i){
            return function(){
                if (this.size == this.value.length && input[i + 1]) {
                    input[i+1].focus();
                }
            };
        })(i);
    }
};
</script>
8
-<input type="text" size="3" maxlength="3" name="input" />
-<input type="text" size="3" maxlength="3" name="input" />
-<input type="text" size="4" maxlength="4" name="input" />


PS: на самом деле еще нужно делать несколько проверок:
- только цифры
- очищать постидущие поля

Последний раз редактировалось monolithed, 06.12.2010 в 10:27.
Ответить с цитированием
  #7 (permalink)  
Старый 04.12.2010, 18:52
Аватар для Vulkan
Профессор
Отправить личное сообщение для Vulkan Посмотреть профиль Найти все сообщения от Vulkan
 
Регистрация: 25.05.2010
Сообщений: 511

monolithed, в моём и твоём примере есть ещё один недостаток - если нажать клавишу любую и не отпускать, текст будет печататься но не перескакивать, понятно что происходит это всё из-за того что событие одно и проверяется только один раз при зажатии клавиши. А в моём примере также недостаток ещё это то что при полном поле инпута клавиша бекспейс не отработает, но это можно решить проверкой кейкода (код бекспейса 8).
Ответить с цитированием
  #8 (permalink)  
Старый 04.12.2010, 19:41
Особый гость
Посмотреть профиль Найти все сообщения от monolithed
 
Регистрация: 02.04.2010
Сообщений: 4,260

Сообщение от Vulkan
monolithed, в моём и твоём примере есть ещё один недостаток - если нажать клавишу любую и не отпускать
Не вопрос подправить, я эту проблему сразу предусмотрел, но забыл о первых двух элементах (в последнем было)

Сообщение от Vulkan
текст будет печататься но не перескакивать, понятно что происходит это всё из-за того что событие одно и проверяется только один раз при зажатии клавиши.
для этого достаточно ограничить вводимое количество символов использую maxlength.

Сообщение от Vulkan
А в моём примере также недостаток ещё это то что при полном поле инпута клавиша бекспейс не отработает, но это можно решить проверкой кейкода (код бекспейса 8).
Я вообще не смог его запустить (в fierefox точно не работает).
Ответить с цитированием
  #9 (permalink)  
Старый 04.12.2010, 20:39
Аватар для Vulkan
Профессор
Отправить личное сообщение для Vulkan Посмотреть профиль Найти все сообщения от Vulkan
 
Регистрация: 25.05.2010
Сообщений: 511

Сообщение от monolithed Посмотреть сообщение
Я вообще не смог его запустить (в fierefox точно не работает).
Точно, в опере работает, в файрфоксе нет. Вот исправленный вариант:
<script>
window.onload = function () {
    var inputs = document.getElementsByTagName('input');
    for (i = 0; i < inputs.length; i++) {
        inputs[i].onkeyup = (function (x) {
            return function () {
                if (inputs[x].size == inputs[x].value.length && inputs[x + 1]) {
                    inputs[x + 1].focus();
                }
            }
        })(i)
    }
}
</script>

8 -<input size="3" maxlength="3"> -<input size="3" maxlength="3"> -<input size="2" maxlength="2"> -<input size="2" maxlength="2">

С onkeyup backspace работает, ну понятно почему, событие проверяется когда клавиша отжимается, а когда backspace отожмётся уже условие для смены фокуса выполняться не будет.

Последний раз редактировалось Vulkan, 05.12.2010 в 07:59.
Ответить с цитированием
  #10 (permalink)  
Старый 04.12.2010, 20:59
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

monolithed, Vulkan на всякий случай сделайте проверку на наличие input[i+1] прежде чем передать ему фокус )))
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проверка поля Номер телефона zhuzha Общие вопросы Javascript 7 12.05.2010 16:40