jQuery focusOut excepto si
-
04-10-2019 - |
Pregunta
Yo simplemente quieren ocultar un div, si un cuadro de texto pierde el foco, a menos que, el usuario hace clic en otra cierta div. Si el usuario hace clic esa particular div, entonces el focusOut no activa el div.box se ocultan.
A continuación se muestra el código con mi pseudocódigo comentar. Algunas ideas?
textInput.focusout(function() {
// So long you didn't click div.stop, then
$('div.box').hide();
});
Solución
var flag = false;
$('div.stop').click(function() {flag = true;});
textInput.focusout(function() {
// So long you didn't click div.stop, then
if(!flag)
$('div.box').hide();
});
Si usted quiere evitar la adición de la variable de indicador, se puede usar jQuery .data para almacenar el valor de bandera contra, por ejemplo el elemento div.stop
, por ejemplo:
$('div.stop').click(function() {$(this).data('clicked', true);});
// ...
if(!$('div.stop').data('clicked'))
// ...
Editar
Si desea permitir la situación en la que el cuadro de texto tiene el foco, y luego hace clic en div.stop
, y no quiere que esconder, entonces podría intentar algo como:
$('div.stop').click(function() {$('div.box').stop();});
textInput.focusout(function() {
// So long you didn't click div.stop, then
$('div.box').delay(200).hide();
});
Otros consejos
$(document).bind('click',function(e) {
if ($(e.target).closest('div.box').length) return;
$('div.box').hide();
});
Trate esto!
var flag = false;
$('#inputID').blur(function(){
$('div.box').toggle(flag);
});
$('#someDIVid').click(function(){
flag = true;
});
sencilla demostración
notas añadidas:
.toggle (showOrHide)
showOrHide A booleano que indica si para mostrar u ocultar los elementos. Si este parámetro es
true
, entonces el emparejado se muestran elementos ; Sifalse
, el elementos están ocultos .