11
votes

dans le corps, cliquez sur DIV masquer, quand je clique sur div aussi il se cache

Je veux montrer un divisé sur un lien clic et masquer si cliquez sur le lien ou DIV.

$(document).ready(function() {
    $("#login").click(function () {
        $("div.login-panel").toggle();
    });

    $("body").click(function(e){
        if(e.target.className == "login" || e.target.className == "login-panel") { 
            //alert("do't hide");  
        }
        else {
            $(".login-panel").hide();
        }
    });
});


0 commentaires

8 Réponses :


0
votes

Problème est lorsque je clique sur la zone de saisie pour entrer le nom d'utilisateur Login-Panel-Div Obtenez des peaux. Pourquoi div masquer?

Parce que, vous avez également cliqué sur le corps, en cliquant dans la DIV. Ensuite, les deux événements sont déclenchés. Découvrez événement.stoppropagation () que vous pouvez utiliser dans l'autre partie de corps.click.


2 commentaires

Si les deux événements sont déclenchés, e.target.classname == "Panneau de connexion" doit être VRAI.CORRECT si je me trompe


Hm, oui. Cela semble raisonnable. Avez-vous essayé d'arrêter la propagation?



0
votes

Vous allez ici:

$(document).ready(function () {
    $("#login").click(function () {
        $("div.login-panel").toggle();
    });
    $("body").click(function (e) {
        if (e.target.nodeName != "INPUT" && e.target.className!= "login" && e.target.className!= "login-panel") {
            $(".login-panel").hide();
        }
    });
});​


0 commentaires

1
votes


1
votes

Lorsque vous cliquez sur un sous-élément, votre condition (e.target.classname) n'est pas appliquée à votre élément parent (

code>). Mais vous pouvez utiliser la fonction la plus proche code> de jQuery (voir ici ) dans l'ordre Pour tester si vous êtes dans votre élément parent:
if(e.target.className == "login" ||  $(e.target).closest(".login-panel").length === 1) {
    ...
}


0 commentaires

26
votes

0
votes

Comme l'autre dit en cliquant sur Entrée Cause événement déclenchant dans le corps, vous devez vérifier si l'expéditeur est enfant de la connexion, je pense que le code fait le tour; xxx

EDIT: Mettre à jour le Condition avec la fonction la plus proche car il est correct.

commence par l'élément actuel, déplace l'arbre DOM jusqu'à ce qu'il trouve une correspondance pour le sélecteur fourni. L'objet JQuery retourné contient zéro ou un élément pour chaque élément de l'ensemble d'origine.


0 commentaires

0
votes

Il suffit de trouver la souris lorsque l'événement de clic se produit,

<script type="text/javascript">
 find_mouse = false;

$(document).ready(function()
{
    $('.login-panel').hover(function(){ 
        find_mouse=true;  // if mouse on login-panel
    }, function(){ 
        find_mouse=false; // not on login panel
    });

    $("body").click(function(){ 
        if(! find_mouse) // if not on login panel
        $('.login-panel').hide();
    });
});
</script> 


1 commentaires

Voici la question non pour les appareils tactiles .!@jigneshkheni