2009-09-14 16 views
239

Sto provando a visualizzare un contenitore se un campo di input ottiene lo stato attivo e - questo è il problema reale - nasconde il contenitore se lo stato attivo viene perso. C'è un evento opposto per l'attenzione di jQuery?jQuery perde l'evento di messa a fuoco

qualche esempio di codice:

<input type="text" value="" name="filter" id="filter"/> 

<div id="options">some cool options</div> 

<script type="text/javascript"> 
    $('#options').hide(); 

    $('#filter').focus(function() { 
    $('#options').appear(); 
    }); 
</script> 

E quello che mi piacerebbe fare è qualcosa di simile:

$('#filter').focus_lost(function() { 
    $('#options').hide(); 
}); 

risposta

398

Usa blur evento per chiamare la funzione quando l'elemento perde il focus:

$('#filter').blur(function() { 
    $('#options').hide(); 
}); 
+3

che cosa se il browser come chrome auto riempie la casella di testo, non credo che attiverà la sfocatura() – pita

38

Ti piace questa:

$(selector).focusout(function() { 
    //Your Code 
}); 
+9

qual è la differenza da questo a 'bl ur'? – cregox

+5

Il metodo sfocatura viene utilizzato per rimuovere il focus (cioè rendere non corrente) l'oggetto a cui appartiene. Dando un campo di testo, la sfocatura sposterà il cursore sul campo successivo. Dando una finestra la sfocatura la sposterà dietro a tutte le altre. Questa non è una parola riservata, quindi puoi dichiarare la tua variabile o funzione chiamata sfocatura, ma se lo fai, non sarai in grado di usare questo metodo per controllare quale oggetto è attuale. – SoftwareARM

+2

Il metodo di messa a fuoco è usato per dare al focus (cioè rendere attuale) l'oggetto a cui appartiene. Dando un campo di testo, lo stato attivo sposterà il cursore su quel campo. Dando una finestra, lo stato attivo lo sposterà di fronte a tutti gli altri. Azioni che non specificano un particolare oggetto da applicare per utilizzare quello che ha lo stato attivo.Questa non è una parola riservata, quindi puoi dichiarare la tua variabile o funzione chiamata focus, ma se lo fai, non sarai in grado di usare questo metodo per controllare quale oggetto è attuale. – SoftwareARM

7

sfocatura evento: quando l'elemento perde lo stato attivo.

evento di messa a fuoco: quando l'elemento o qualsiasi elemento all'interno di esso perde lo stato attivo.

Poiché non c'è nulla all'interno dell'elemento del filtro, in questo caso sia la sfocatura che lo sfocamento funzioneranno.

$(function() { 
    $('#filter').blur(function() { 
    $('#options').hide(); 
    }); 
}) 

jsfiddle con sfocatura: http://jsfiddle.net/yznhb8pc/

$(function() { 
    $('#filter').focusout(function() { 
    $('#options').hide(); 
    }); 
}) 

jsfiddle con focusOut: http://jsfiddle.net/yznhb8pc/1/

+0

Questa dovrebbe essere la risposta accettata –

0

Se le 'Opzioni cool' sono nascosti dalla vista prima che il campo si concentra allora si vorrebbe creare questo in JQuery invece di averlo nel DOM in modo che chiunque usi uno screen reader non veda le informazioni non necessarie. Perché dovrebbero ascoltarlo quando non dobbiamo vederlo?

in modo da poter variabili di setup in questo modo:

var $coolOptions= $("<div id='options'></div>").text("Some cool options"); 

e quindi aggiungere (o anteporre) sulla messa a fuoco

$("input[name='input_name']").focus(function() { 
    $(this).append($coolOptions); 
}); 

e quindi rimuovere quando il focus si conclude

$("input[name='input_name']").focusout(function() { 
    $('#options').remove(); 
}); 
Problemi correlati