91 votes

Comment stopper le comportement de clic par défaut d'un lien avec jQuery

J'ai un lien sur une page web. Lorsqu'un utilisateur clique dessus, un widget de la page doit être mis à jour. Cependant, je fais quelque chose, car la fonctionnalité par défaut (navigation vers une autre page) se produit avant le déclenchement de l'événement.

Voici à quoi ressemble le lien :

<a href="store/cart/" class="update-cart">Update Cart</a>

Voici à quoi ressemble le jQuery :

$('.update-cart').click(function(e) { 
  e.stopPropagation(); 
  updateCartWidget(); 
});

Quel est le problème ?

0 votes

Duplicata possible de jQuery désactiver un lien

140voto

artworkad シ Points 15473
e.preventDefault();

de https://developer.mozilla.org/en-US/docs/Web/API/event.preventDefault

Annule l'événement s'il est annulable, sans arrêter la propagation ultérieure de l'événement.

7 votes

Merci, j'avais stopPropagation y preventDefault confus

36voto

Peeter Points 4580
$('.update-cart').click(function(e) {
    updateCartWidget();
    e.stopPropagation();
    e.preventDefault();
});

$('.update-cart').click(function() {
    updateCartWidget();
    return false;
});

Les méthodes suivantes permettent d'obtenir exactement la même chose.

0 votes

Pourquoi dois-je appeler stopPropagation() y preventDefault() ?

2 votes

Regardez la réponse de Jonathon, il explique ce que fait chaque fonction. Mais en gros, il s'agit de s'assurer que le clic que vous venez de gérer n'est pas géré par quelqu'un d'autre plus tard.

31voto

Jonathon Bolster Points 8663

Vous voulez e.preventDefault() pour empêcher la fonctionnalité par défaut de se produire.

Ou bien return false de votre méthode.

preventDefault empêche la fonctionnalité par défaut et stopPropagation empêche l'événement de remonter jusqu'aux éléments du conteneur.

3voto

Null Pointer Points 2355

Vous pouvez utiliser e.preventDefault(); au lieu de e.stopPropagation();

1voto

Matoeil Points 721

Ce code dépouille tous les écouteurs d'événements

var old_element=document.getElementsByClassName(".update-cart");    
var new_element = old_element.cloneNode(true);
old_element.parentNode.replaceChild(new_element, old_element);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X