jQuery Mobile фокусируется на следующем вводе при нажатии клавиш - PullRequest
9 голосов
/ 05 мая 2011

У меня есть мобильный сайт jquery с html-формой, состоящей из 4-х контактных полей ввода. Я хочу, чтобы пользователь мог вводить пин-код в каждое поле ввода, не нажимая кнопку «Далее» на клавиатуре iphone. Я попробовал следующее, и, хотя он, кажется, устанавливает фокус на второй вход и вставляет значение, клавиатура исчезает, поэтому пользователю все равно нужно активировать необходимый ввод с помощью события касания.

$('#txtPin1').keypress(function() {
        $('#txtPin1').bind('change', function(){  
            $("#txtPin1").val($("#txtPin1").val()); 
        });
        $("#txtPin2").focus();
        $("#txtPin2").val('pin2');
});

Есть ли другое событие, которое я должен назначить для $ ("# txtPin2")?

Я пытался реализовать http://jqueryminute.com/set-focus-to-the-next-input-field-with-jquery/ это тоже, но я обнаружил, что это работает для Android, а не для Iphone.

Любая помощь очень ценится.

Ответы [ 2 ]

4 голосов
/ 05 мая 2011

Live Пример: http://jsfiddle.net/Q3Ap8/22/

JS:

$('.txtPin').keypress(function() {
    var value = $(this).val();

    // Let's say it's a four digit pin number
    // Value starts at zero
    if(value.length >= 3) {
        var inputs = $(this).closest('form').find(':input');
        inputs.eq( inputs.index(this)+ 1 ).focus();
    }
});

HTML:

<div data-role="page" data-theme="b" id="jqm-home">
    <div data-role="content">
        <form id="autoTab">
            <label for="name">Text Pin #1:</label>
            <input type="text" name="txtPin1" id="txtPin1" value="" class="txtPin" placeholder="Please enter Pin #1"/>

            <br />
            <label for="name">Text Pin #2:</label>
            <input type="text" name="txtPin2" id="txtPin2" value="" class="txtPin" placeholder="Please enter Pin #2"/>

            <br />
            <label for="name">Text Pin #3:</label>
            <input type="text" name="txtPin3" id="txtPin3" value="" class="txtPin" placeholder="Please enter Pin #3"/>

            <br />
            <label for="name">Text Pin #4:</label>
            <input type="text" name="txtPin4" id="txtPin4" value="" class="txtPin" placeholder="Please enter Pin #4" maxlength="4"/>
        </form>
    </div>
</div> 
3 голосов
/ 29 марта 2013

Я попробовал это на андроиде, и это работает. Я не могу проверить это на iPhone. Проверьте это: http://jsfiddle.net/Q3Ap8/276/ [прямая ссылка: http://fiddle.jshell.net/Q3Ap8/276/show/]

$('.txtPin').keydown(function() {
    that=this;
    setTimeout(function(){
        var value = $(that).val();
        if(value.length > 3) {
        $(that).next().next().next().focus().tap();
        }
     },0);
});

Другое решение, которое работает на Android: http://jsfiddle.net/Q3Ap8/277/ [http://jsfiddle.net/Q3Ap8/277/show]

$('.txtPin').keydown(function() {
    that=this;
    setTimeout(function(){
        var value = $(that).val();
        if(value.length > 3) {
        $(that).next().next().next().click();
        }
     },0);
});
$('.txtPin').click(function() {
   $(this).focus().tap();
});
...