2017-04-17 3 views
2

Voici mon script pour afficher et masquer le contenu d'un clic sur un div. Je veux également désactiver d'autres éléments div jusqu'à ce que le premier div soit de nouveau cliqué.Comment régler jquery unbind comme toggle

$('.leader-pic-wrapper').click(function(){ 
    var $el = $(this); 
    var bottom = $el.position().top + ($el.outerHeight(true) - 30); 
    $('.leader-pic-overlay').toggle(); 
    $('.leader-pic-wrapper').not(this).toggleClass('inactive-leader'); 

    /*$(".inactive-leader").unbind("click");*/ 
    $(".inactive-leader").off("click"); 

    $(this).next('.leader-profile-wrapper').css('top', bottom); 
    $(this).next('.leader-profile-wrapper').toggle(); 
}); 

Je ne comprends pas comment basculer l'instruction unbind. J'ai essayé de basculer une classe appelée inactive-leader et d'appliquer unbind à cette classe, mais cela ne fonctionne pas.

Fondamentalement, je veux mettre unbind sur

leader-pic-wrapper 

Merci

+1

version utilisez-vous? peut-être passer à utiliser ** on() & off() ** – DaniP

+0

juste essayé - il fonctionne .. mais la question reste encore, comment puis-je le faire sur un deuxième clic sur le même élément ... –

+0

Au lieu de la reliure ou déconnexion je voudrais utiliser un var qui garde la trace de l'état, et une seule liaison initiale, et mettre à jour ce var (ou tableau de statuts vars si nécessaire plus d'un) et vérifier la fonction le statut – Diego

Répondre

2

Mon option est approche cela avec une vue différente. Sans bind et unbind, l'événement exclut simplement les éléments avec le premier sélecteur en utilisant :not(), et comme vous le faites ajoutez une classe aux éléments que vous voulez exclure; s'il vous plaît vérifier cet extrait:

$('body').on('click', '.box:not(".disabled")', function() { 
 
    if ($('.disabled').length) { 
 
    $(this).siblings().removeClass('disabled') 
 
    $(this).animate({ 
 
     'width': '80px' 
 
    }, 300) 
 
    } else { 
 
    $(this).siblings().addClass('disabled') 
 
    $(this).animate({ 
 
     'width': '160px' 
 
    }, 300) 
 
    } 
 
})
.box { 
 
    display: inline-block; 
 
    height: 80px; 
 
    width: 80px; 
 
    background: tomato; 
 
    margin: 5px; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="box"></div> 
 
<div class="box"></div> 
 
<div class="box"></div> 
 
<div class="box"></div>


Cette logique sur votre code ressemblera à ceci:

//Delegate the event since we are add/remove the class 
//Target the elements that aren't inactive 
$('body').on('click', '.leader-pic-wrapper:not(".inactive-leader")', function() { 
    var $el = $(this); 
    var bottom = $el.position().top + ($el.outerHeight(true) - 30); 

    //Check if exists some inactive elements to handle 1/2 click 
    if ($('.inactive-leader').length) { 
    //Target other leader-pic-wrapper elements, use sibling or the method you need based on your markup 
    $(this).siblings().removeClass('inactive-leader') 
    //...ACTIONS - This will act as the second click 
    } else { 
    $(this).siblings().addClass('inactive-leader') 
    //...ACTIONS - This will act as the first click 
    } 
}); 
+0

Cela a fonctionné parfaitement .. .J'ai besoin de lire un peu de documentation avant de pouvoir comprendre cela. –

+0

heureux d'aider U @StacyJ si vous avez des questions sur ces lignes de code, je serai très heureux de le résoudre – DaniP

+0

hey, je dois ajouter un bouton de fermeture à l'intérieur d'un élément div hors. Cette div s'ouvre quand je clique sur la .box et a un bouton de fermeture. J'ai écrit un bloc de code supplémentaire - sur le clic du bouton de fermeture ferme la div et supprime la classe inactive-leader. Cela fonctionne bien, sauf, après avoir fermé en utilisant le bouton de fermeture, .box a besoin de 2 clics pour fonctionner de la manière habituelle. Une idée de pourquoi cela arrive –