2009-09-14 48 views
239

Estoy tratando de mostrar un contenedor si un campo de entrada obtiene el foco y, ese es el problema real, esconde el contenedor si se pierde el foco. ¿Hay un evento opuesto para el enfoque de jQuery?jQuery perder evento de foco

un código de ejemplo:

<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> 

Y lo que me gustaría hacer es algo como esto:

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

Respuesta

398

Uso blur evento para llamar a su función cuando el elemento pierde el foco:

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

¿y si el navegador como Chrome automáticamente llena el cuadro de texto, no creo que activará el desenfoque() – pita

38

De esta manera:

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

¿cuál es la diferencia de esto a 'bl tu'? – cregox

+5

El método de desenfoque se usa para eliminar el foco (es decir, no hacer corriente) del objeto al que pertenece. Al dar un campo de texto, la imagen borrosa moverá el cursor al siguiente campo. Dando una ventana, el desenfoque lo moverá detrás de todos los demás. Esta no es una palabra reservada por lo que puede declarar su propia variable o función llamada desenfoque, pero si lo hace, entonces no podrá usar este método para controlar qué objeto es actual. – SoftwareARM

+2

El método de enfoque se utiliza para dar el foco (es decir, hacer actual) el objeto al que pertenece. Al dar un campo de texto, el foco moverá el cursor a ese campo. Darle una ventana al foco lo moverá frente a todos los demás. Acciones que no especifican un objeto particular para aplicar para usar el que tiene el foco.Esta no es una palabra reservada, por lo que puede declarar su propia variable o función llamada foco, pero si lo hace, entonces no podrá usar este método para controlar qué objeto es actual. – SoftwareARM

7

caso desenfoque: cuando el elemento pierde el foco.

evento de enfoque: cuando el elemento, o cualquier elemento dentro de él, pierde el foco.

Como no hay nada dentro del elemento del filtro, tanto el desenfoque como el enfoque funcionarán en este caso.

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

jsFiddle con el desenfoque: http://jsfiddle.net/yznhb8pc/

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

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

+0

Esta debería ser la respuesta aceptada –

0

Si los 'Cool Opciones' se ocultan de la vista antes de que el terreno se concentra entonces usted desea crear esto en JQuery en lugar de tenerlo en el DOM para que cualquiera que use un lector de pantalla no vea información innecesaria. ¿Por qué tendrían que escucharlo cuando no tenemos que verlo?

Para que pueda variables de configuración, así:

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

y luego añadir (o anteponer) en el foco

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

y luego retire cuando el foco termina

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