jQuery Mobile фокусирует следующий ввод при нажатии клавиши

#input #focus #jquery-mobile #tap

#ввод #фокусировка #jquery-mobile #коснитесь

Вопрос:

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

 $('#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.

Я очень признателен за любую помощь.

Комментарии:

1. Позвольте мне прояснить проблему: похоже, что устройства iOS не принимают методы focus () и / или select (). Поле становится видимым выделенным / активированным, однако, похоже, отсутствует событие «click» или «tap» для активации клавиатуры устройства.

Ответ №1:

Живой пример: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> 
  

Комментарии:

1. Спасибо за помощь. Я опробовал ваш код, и хотя фокус устанавливается на следующий ввод, клавиатура iphone становится скрытой, поэтому пользователю по-прежнему требуется нажать поле сфокусированного ввода. Событие должно запускаться при вводе клавиши, чтобы значения записывались в первый ввод перед переходом к следующему. Есть ли способ инициировать нажатие клавиши при следующем вводе?

2. У меня такая же проблема, как описано выше!

Ответ №2:

Я попробовал это на Android, и это работает. Я не могу проверить это на 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();
});
  

Комментарии:

1. Я собираюсь протестировать это 🙂 на данный момент мой iPhone выходит из строя. Я думаю, я установил плохую настройку от Cydia, ха-ха.

2. Похоже, что он не работает на iPhone. Попробовал пару вещей

3. Я не получаю отзыв о событии tap. Я попробовал tap (function() { alert (‘tapped’); }); но это ничего не дало. Я попробую ваше решение через минуту.

4. Я думаю, что фокус без нажатия тоже должен работать. На данный момент я не могу проводить больше тестов. На самом деле в iPhone существует ограничение, что клавиатура может отображаться только после события взаимодействия с пользователем, поэтому она должна работать при вызове. фокусировка () в обработчике .click. Я не уверен, работает ли это для триггера artificial .click.

5. К сожалению, это не так.. спасибо, что уделили мне время. Я попытаюсь посмотреть, смогу ли я заставить все работать.