2012-03-07 23 views
21

Alcuni pensieri sono che ELEMENT_ID.focus() è all'interno di div che sono nascosti in determinati momenti.Quali sono alcuni motivi per cui jquery .focus() non funziona?

Questo dovrebbe essere un problema facile da risolvere - ma sto lottando :(

*** codice funziona bene -. Il campo di testo non viene focalizzata su su caricamento della pagina fino

STEP1 [Risolto] JavaScript:

$("#goal-input").focus(); 

$('#goal-input').keypress(function(event){ 
var keycode = (event.keyCode ? event.keyCode : event.which); 
    if(keycode == '13') { 
etc, etc, etc 
} 

HTML

<input type="text" id="goal-input" name="goal" /> 

[STEP2] JavaScript:

if (goal) { 
      step1.fadeOut('fast', function() { 
      step1.hide(); 
      step2.fadeIn('fast'); 

etc, etc 

HTML:

<div id="step-2"> 
     <div class="notifications"> 
     </div> 
     <input type="text" id="name" name="name" placeholder="Name" /> 
       <script type="text/javascript"> 
       $(function(){ 
       $("#name").focus(); 
       }); 
      </script> 

Perché non si attiva più 2 di lavoro? :(

+3

Come su qualche codice di esempio? - Secondo i documenti di jQuery su ['.focus()'] (http://api.jquery.com/focus/): "Tentare di impostare lo stato attivo su un elemento nascosto causa un errore in Internet Explorer. Abbi cura di usare solo .focus() sugli elementi visibili. Per eseguire i gestori di eventi focus di un elemento senza impostare lo stato attivo sull'elemento, utilizzare .triggerHandler ("focus") anziché .focus(). " – Morgon

+0

Cosa intendi" non funziona "? Per esempio., il codice viene eseguito senza errori segnalati ma lo stato attivo non viene impostato come desiderato oppure il browser segnala un errore? – nnnnnn

+0

fornito codice di esempio e cosa significa "non funziona" (il campo di testo non è focalizzato su) @nnnnnn – dngoo

risposta

12

devi o inserire il codice qui sotto il codice HTML o il carico se si utilizza l'evento di caricamento del documento:.

<input type="text" id="goal-input" name="goal" /> 
<script type="text/javascript"> 
$(function(){ 
    $("#goal-input").focus(); 
}); 
</script> 

Aggiornamento:

Il cambio di divisione non attiva l'evento di caricamento del documento poiché tutto è già stato caricato. È necessario mettere a fuoco quando si passa div:

if (goal) { 
     step1.fadeOut('fast', function() { 
      step1.hide(); 
      step2.fadeIn('fast', function() { 
       $("#name").focus(); 
      }); 
     }); 
} 
+2

Direi che tutto il codice relativo al DOM dovrebbe sempre andare all'interno di un gestore di caricamento DOM, indipendentemente dalla sua posizione relativa ai suoi obiettivi. :) – Morgon

+0

Demo: http://jsfiddle.net/BXpkY/ –

+0

Questo dimostra che semplicemente nascondendo e mostrando il 'div' padre dovrebbe cambiare l'attivazione' $ .focus() ': http://jsfiddle.net/3Sz8Z/ –

3

provare qualcosa di simile quando si sta applicando a fuoco in questo modo, se l'elemento è nascosto, non genera un errore:

$("#elementid").filter(':visible').focus(); 

Potrebbe avere più senso per rendere l'elemento visibile, anche se che richiederà il codice specifico per il layout

5

Non dimenticate che un campo di input deve essere visibile prima, da allora in poi si è in grado di concentrarsi esso.

$("#elementid").show(); 
$("#elementid input[type=text]").focus(); 
25

Ho riscontrato problemi nell'attivare l'attivazione di un elemento (un input di modulo) che stava passando alla pagina. Ho trovato che è stato risolvibile invocando l'evento di messa a fuoco da all'interno di un setTimeout senza alcun ritardo su di esso. A quanto ho capito (da, ad esempio, this answer), questo ritarda la funzione fino al termine della coda di esecuzione corrente, quindi in questo caso ritarda l'evento di messa a fuoco fino al completamento della transizione.

setTimeout(function(){ 
    $('#goal-input').focus(); 
}); 
+0

questo ha funzionato per me, ty! –

+0

Brilliant idea ... –

+0

Ho dovuto usare un timeout di 600 prima che iniziasse a funzionare, quindi 'setTimeout (function() {$ ('# goal-input'). Focus();}, 600);' nel sopra esempio. – SharpC

3

ho scoperto che focus non funziona quando si cerca di ottenere un focus su un elemento di testo (ad esempio un avviso div), ma funziona quando concentrandosi sui campi di input.

Problemi correlati