2013-07-08 3 views
0

Пожалуйста, посетите эту скрипку первый: http://jsfiddle.net/7Prys/JQuery OnChange() получить другое поле, сфокусированное

То, что я хочу получить, когда пользователь вводит первые поля (пользователь может вводить только одну строку для каждого поля) второго сфокусироваться автоматически , и это продолжается до четвертого поля ввода. Есть ли быстрый jQuery для этого? А также, когда я удаляю код, предыдущий будет сфокусирован один на один при нажатии клавиши backspace.

Вот HTML:

<input type="text" maxlength="1" class="small" /> 
<input type="text" maxlength="1" class="small" /> 
<input type="text" maxlength="1" class="small" /> 
<input type="text" maxlength="1" class="small" /> 

и JQuery:

$(".small").onchange(function() { 
    $(this).next().find(".small").focusIn(); 
}); 
+0

Пожалуйста, избегайте внесенных изменений, которые аннулируют существующие ответы или делают их неполными. Если вам нужна дополнительная информация, подумайте над тем, чтобы открыть новый вопрос. –

ответ

3

Здесь вы идете:

$(".small").on('keyup', function (e) { 
    if(e.keyCode == 8){ /* backspace */ 
     $(this).prev('.small').focus(); 
    }else{ 
     $(this).next('.small').focus(); 
    } 
}); 

Fiddle: http://jsfiddle.net/7Prys/10/
Это перейдет к следующему входу, когда будет нажата любая клавиша, отличная от обратного пространства, и перейдите к предыдущему входу, когда будет нажата обратная сторона. Обратите внимание, что вы можете добавить || e.keyCode == 46 оператор if, если хотите распознать клавишу Delete.


Нет такой вещи, как .onChange или .focusIn. .on может использоваться для события keyup, как в моем примере. Кроме того, .find().next('.small') должно быть только .next('.small').

+1

Для чего это стоит' .on', как правило, лучше, потому что он согласуется с другими событиями, такими как 'click',' mouseover' и т. д. – Mooseman

2

Там нет нет такого понятия как об изменении события.

является a change мероприятие вы можете использовать.

+0

Я пробовал с изменением() не работает – Asif

+0

@ aks007 нет такой вещи, как 'focusIn' – Neal

3

Try:

$(".small").keyup(function() { 
    $(this).next().focus(); 
}); 

jsFiddle example

Несколько замечаний. В jQuery вы используете .change(), а не .onchange(). Во-вторых, .find() выполняет поиск по элементам потомков, поэтому в вашем примере он никогда не найдет нужный элемент, поскольку они являются братьями и сестрами.

3

Здесь есть множество проблем.

onchange должно быть change, но это будет срабатывать только тогда, когда вход теряет фокус, который не работает так хорошо. Я предлагаю использовать .keyup.

$(this).next() - это элемент ввода, поэтому $(this).next().find(".small") ничего не найдет. Вы можете использовать $(this).next(".small"), но достаточно $(this).next().

http://jsfiddle.net/ExplosionPIlls/7Prys/6/

EDIT: Вы можете проверить e.which == 8, чтобы определить, если забой была нажата, а затем использовать .prev вместо этого.

http://jsfiddle.net/ExplosionPIlls/7Prys/11/

5

Это работает для меня:

$(".small").keyup(function (e) { 
    if(e.keyCode == 46 || e.keyCode == 8){ 
     $(this).prev('.small').focus(); 
    } 
    else { 
     $(this).next('.small').focus(); 
    } 
}); 

Fiddle: http://jsfiddle.net/5Sv2f/

Смежные вопросы