Votre problème est que live
n'est pas lié à un ensemble spécifique d'éléments, il est lié aux éléments qui correspondent à un sélecteur particulier au moment où le clic se produit. Cela signifie que vous ne pouvez pas utiliser unbind
o off
pour empêcher le clic de déclencher le gestionnaire.
Vous pouvez toutefois modifier légèrement votre sélecteur pour exclure les éléments ayant une certaine classe, puis ajouter cette classe à l'indicateur live
d'ignorer votre élément :
$('.el a:not(.been-clicked)').live('click', function(event){
event.preventDefault();
var $this = $(this);
$.ajax({
url: $this.attr('href'),
type: 'GET',
success: function(response){
$this.addClass('been-clicked');
}
});
});
Démonstration de la technique : http://jsfiddle.net/ambiguous/Deh5j/
Greg Pettit a raison de dire dans les commentaires que live
ne devrait plus être utilisé si vous utilisez jQuery 1.7 et est quelque peu désapprouvé même en 1.6. Il est généralement préférable d'utiliser delegate
avant 1.7 et on
si vous utilisez la version 1.7 :
$(document).on('click', '.el a:not(.been-clicked)', function() {
//...
});
Vous ne pouvez toujours pas utiliser unbind
o off
pour arrêter cette version de on
(sauf dans des circonstances très étroites, comme par exemple si vous n'avez qu'un seul élément qui correspond à .el a
et vous n'avez qu'un seul gestionnaire de clics attaché (ou si vous utilisez une fonction nommée)). Vous avez toujours besoin de quelque chose comme l'astuce ci-dessus "ajouter une classe comme un drapeau" si vous utilisez le style de liaison "en direct", si vous vous liez à un ensemble spécifique d'éléments qui existent lorsque vous liez votre gestionnaire de clics, alors vous ne devriez pas utiliser la fonction live
du tout, vous devriez utiliser l'un des bind
, click
o on
pour lier un gestionnaire à ces éléments spécifiques, puis vous pouvez utiliser la fonction unbind
o off
pour détacher les gestionnaires. Ou mieux, vous pouvez simplement utiliser one
et laisser jQuery s'occuper de détacher le gestionnaire.