37 votes

Désactivation des liens pour arrêter les doubles-clics dans JQuery

Comment désactiver tous les liens avec la classe button après un clic sur eux? J'aimerais pouvoir le faire dans un endroit et ne pas avoir à les changer individuellement. Des idées?

Jusqu'ici j'ai eu ceci:

 $("a.button").click(function() { $(this).attr("disabled", "disabled"); });
$("a[disabled]").click(function() { return false; });
 

mais le deuxième événement ne se déclenche pas ..

74voto

Adam Points 569

C'est ce que je voudrais essayer:

 $("a.button").one("click", function() {
    $(this).click(function () { return false; });
});
 

Liez tous les liens avec la classe "button". N'exécutez la fonction anonyme qu'une seule fois (d'où "un"), ce qui permet au lien de renvoyer la valeur false.

Si vous voulez qu'il ressemble davantage à ce que vous avez, essayez ceci:

 $("a.button").click(function() { $(this).attr("disabled", "disabled"); });
$(document).click(function(evt) {
     if ($(evt.target).is("a[disabled]"))
          return false;
});
 

26voto

Steven Soroka Points 8446

J'ai une solution élégante pour cela si vous utilisez des liens:

 function do_nothing() { 
  return false;
}

// prevent a second click for 10 seconds. :)
$('.prevent_doubleclick').live('click', function(e) { 
  $(e.target).click(do_nothing); 
  setTimeout(function(){
    $(e.target).unbind('click', do_nothing);
  }, 10000); 
});
 

https://github.com/ssoroka/prevent_doubleclick.js

J'ajouterai bientôt un support pour les formulaires.

13voto

Seb Points 17238

Oui, définissez une valeur pour garder une trace de ceci:

 $("a").click(function (){
  if( $(this).data("clicked") ){
    return false;
  }
  $(this).data("clicked", true);
  return true;
});
 

5voto

Paul Points 3588

créez un JS - incluez-le sur chaque page (ou dans votre page principale si vous en avez un).

Je pense quelque chose comme

 $(document).ready(function(){
  $('.button').click(function(){
    $('.button').click(function(e) {
      e.preventDefault();

    });
  }
}
 

3voto

borkweb Points 706

Vous pouvez aussi simplement jeter une classe sur la balise anchor et vérifier en cliquant:

 $('a.button').click(function(){ 
  if($(this).hasClass('clicked')) return false;
  else { 
    $(this).addClass('clicked'); 
    return true;
  }
});
 

Avec la classe, vous pouvez créer un style supplémentaire pour le lien après le premier clic.

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