Question

Je veux simplement cacher une div, si une zone de texte perd le focus, à moins que, l'utilisateur clique dans un autre certain div. Si l'utilisateur clique que div particulier, le focusout ne déclenche pas la div.box étant cachés.

Voici le code avec mon pseudo commentaire. Toutes les idées?

textInput.focusout(function() {
    // So long you didn't click div.stop, then
        $('div.box').hide();
});
Était-ce utile?

La solution

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 vous voulez éviter d'ajouter la variable de drapeau, vous pouvez utiliser jQuery de .data pour stocker la valeur du drapeau contre par exemple l'élément de div.stop, par exemple:

$('div.stop').click(function() {$(this).data('clicked', true);});

// ...

    if(!$('div.stop').data('clicked'))
// ...

EDIT

Si vous voulez permettre la situation dans laquelle la zone de texte a le focus, et vous cliquez sur div.stop, et vous ne voulez pas à cacher, vous pouvez essayer quelque chose comme:

$('div.stop').click(function() {$('div.box').stop();});
textInput.focusout(function() {
    // So long you didn't click div.stop, then
    $('div.box').delay(200).hide();
});

Autres conseils

$(document).bind('click',function(e) {
  if ($(e.target).closest('div.box').length) return;
  $('div.box').hide();
});

Essayez ceci!

var flag = false;
$('#inputID').blur(function(){
   $('div.box').toggle(flag);       
});

$('#someDIVid').click(function(){
    flag = true;
});

simple, démo

notes ajoutées:

  

.toggle (showOrHide)

     

showOrHide A booléenne indiquant si pour afficher ou masquer les éléments. Si ce paramètre est true, la correspondance éléments sont présentés ; si false, sont cachés .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top