2010-11-04 7 views
3

Je suivais ce fil pour désactiver/activer le clic sur un bouton, Best way to remove an event handler in jQuery?jquery: live() - vit seulement une fois?

son idée est que vous pouvez également utiliser la méthode en direct() pour activer/désactiver les événements. Ce qui se passera avec ce code, c'est que lorsque vous cliquez sur un élément-tag, par exemple, .load-item, il ajoutera la classe désactivée à cet élément. Cela fera en sorte que le sélecteur ne corresponde plus à l'élément et que l'événement ne sera pas déclenché tant que la classe 'disabled' n'aura pas été supprimée, rendant le sélecteur .live() de nouveau valide.

est inférieur à ce que je suis sorti avec et il ne désactive le clic sur le premier bouton,

$('.load-item:not(.disabled)').live('click',function(){ 


/* add a .current class to the target item */ 
$(this).parentsUntil('.column-global').addClass('current'); 

/* add .disabled class to each a tag in the .current element-div */ 
$('.current a').each(function(index) { 
    $(this).addClass('disabled'); 
}); 

.... 

}); 

et j'ai une autre fonction pour supprimer la classe désactivée lorsque vous cliquez sur un autre bouton,

$('.button-return').click(function(){ 

    ... 

    /* remove all the .disabled class if any exists */ 
    $('.current a').each(function(index) { 
     $(this).removeClass('disabled'); 
    }); 

    ... 

    /* remove all the .current class if any exists */ 
    $('.item-global').removeClass('current'); 



    return false; 

}); 

J'ai vérifié qu'il supprime la classe disabled, mais le premier bouton n'est toujours pas à l'état cliquable d'origine.

ai-je manqué quelque chose - ou le live() ne vit qu'une fois seulement? de meilleures solutions si vivre() n'est pas celui sur lequel je devrais travailler ??

merci.

Répondre

1

Votre bouton de retour doit être un événement en direct et

$('.button-return:not(disabled)').live("click",function(){...}); 

également lors de l'utilisation addClass() et removeClass() vous n'avez pas besoin d'utiliser chacun sur le sélecteur. Il suffit de l'appeler.

$('.current a').each(function(index) { 
    $(this).removeClass('disabled'); 
}); 

est le même que celui

$('.current a').removeClass('disabled'); 

Edité

Remarque lorsque vous ajoutez l'événement en direct sur le bouton de retour, vous devez vérifier qu'il est pas désactivé.

Il fonctionne parfaitement ici est un simple demo.http://www.jsfiddle.net/Qax3n/

+0

Pourquoi '.button-return' doit-il être actif? Je ne vois pas que cette classe est manipulée dynamiquement n'importe où ... –

+0

l'a essayé mais ne fonctionne toujours pas après avoir ajouté live() au .button-return. merci à propos de removeClass(). – laukok

+0

@lauthiamkok ... Testé la fonctionnalité de base et créé une démo. la démo de base fonctionne parfaitement. Essaie. –