2013-06-29 10 views
27

consulta questo violino: http://jsfiddle.net/yg49k/jQuery fuoco non funziona in Chrome

Il seguente codice funziona bene in Firefox, ma non funziona nella sua ultima versione di Chrome.

HTML:

<input type="text" id="one" placeholder="Type two chars" /> 
<input type="text" id="two" placeholder="It should focus here" /> 

jQuery:

$("#one").on("input", function() { 
    if($("#one").val().length == 2) { $("#two").focus(); } 
}); 

Qualcuno sa come posso ottenere intorno a questo?

+0

Perché stai passando 4 argomenti al metodo 'on'? Non devi. – undefined

+0

quale versione? in 29 funziona bene. – AntouanK

+0

Un po 'hacky ma: http://jsfiddle.net/yg49k/1/ ora funziona per me. – mash

risposta

68

Sembra un errore in Chrome. A volte è troppo veloce per eseguire correttamente gli eventi;)

Trovato una soluzione http://jsfiddle.net/Rd2rZ/

$("#one").on("input", function() { 
    if($("#one").val().length == 2) { 
     setTimeout(function(){ 
      $("#two").focus(); 
     }, 1); 
    } 
}); 

Usa setTimeout con un ritardo minimo. Farà rallentare Chrome e farlo funzionare.

+0

Funziona perfettamente e non compromette il altrimenti molto utile 'on ("input ..." – rybo111

+2

ya, è semplice anche non è necessario impostare alcun ritardo per il timeout –

+0

Sì, evento molto utile che sostituisce l'uso di una serie di altri eventi. Tuttavia non è supportato in IE <9. Utilizzare l'evento 'onpropertychange' per vecchi IE. – claustrofob

1

Si dovrebbe usare:

$("#one").on("keyup paste",function() { 
    console.log($(this).val()); 
    if($(this).val().length == 2) { $("#two").focus(); } 
}); 

DEMO

E lo stesso per il gestore #five.

L'evento oninput sembra avere lo stesso comportamento di onkeypress.

+0

Il metodo 'on (" keyup paste ... 'ha degli svantaggi rispetto a' on ("input ...'? Ho trovato che sia affidabile (a parte quando si usa apparentemente 'focus()'. ..) – rybo111

+0

scusa commento errato Come ho detto il lato negativo sarebbe che su elemento sfocato non sparato questo gestore paragonare a oninput –

+0

Abbastanza sufficiente.ho notato che se si tiene premuto il tasto verso il basso ignora la funzione considerando 'input' no – rybo111

0
$("#one").keydown(function(){ 
    if($(this).val().length==2) 
    { 
     $("#two").focus(); 
    } 
}); 
+1

keydown non è valido per recuperare il valore corrente (previsto) dell'input –

-4

Ho avuto lo stesso problema e l'ho risolto usando il seguente codice:
Dovresti anche avere un attributo nome per il tuo input per farlo funzionare.

$("#one").on("input", null, null, function() { 
    if($("#one").val().length == 2) { 
     setTimeout(function() { $('input[name="one"]').focus() }, 3000); 
    } 
}); 

Spero che questo aiuti qualcuno che non ha funzionato usando gli altri suggerimenti.

+0

Questo non aggiunge nulla alla risposta accettata. – rybo111

Problemi correlati