2011-05-04 30 views
9

Tengo un sitio móvil jquery con un formulario html que consta de 4 entradas de entrada de cuadros de entrada. Quiero que el usuario pueda ingresar un pin en cada campo de entrada sin tener que presionar el botón "Siguiente" de los teclados de iphone. He intentado lo siguiente y aunque parece establecer el foco en la segunda entrada e insertar el valor, el teclado desaparece, por lo que el usuario aún tiene que activar la entrada requerida con un evento tap.jQuery Mobile focus siguiente entrada en keypress

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

¿Hay algún otro evento que deba asignarse a $ ("# txtPin2")?

He intentado implementar http://jqueryminute.com/set-focus-to-the-next-input-field-with-jquery/ esto también, pero encontré que funcionaba para android y no para iphone.

Cualquier ayuda es muy apreciada.

+0

Permítanme aclarar la generosidad: parece que los dispositivos IOS Don no se aceptan los métodos focus() y/o select(). El campo se selecciona/activa visiblemente; sin embargo, parece que falta un evento de 'clic' o 'toque' para activar el teclado de los dispositivos. –

Respuesta

3

Ejemplo vivo: 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

Gracias por la ayuda. Probé tu código y aunque el foco se está configurando para la próxima entrada, el teclado de iphones se oculta, por lo que aún se requiere que el usuario toque el cuadro de entrada enfocado. El evento debe activarse en la tecla para que los valores se escriban en la primera entrada antes de pasar a la siguiente. ¿Hay alguna manera de activar una tecla en la siguiente entrada? – user738175

+0

¡Estoy teniendo el mismo problema que el descrito anteriormente! –

3

lo probé en Android y funciona. No puedo verificarlo en el iPhone. Compruebe esto: http://jsfiddle.net/Q3Ap8/276/ [enlace directo: 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); 
}); 

Otra solución que funcione para android es: 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(); 
}); 
+0

Voy a probar esto :) en el momento en que mi iPhone se cuelga. Supongo que instalé una mala modificación de Cydia, jaja. –

+0

Parece que no funciona en el iPhone. Intenté un par de cosas –

+0

He probado otra (ver edición). – Saram

Cuestiones relacionadas