149 votes

Comment activer ou désactiver une ancre en utilisant jQuery?

Comment activer ou désactiver une ancre en utilisant jQuery?

193voto

karim79 Points 178055

Pour éviter une ancre à la suite de la spécifiés href, je conseille preventDefault():

// jQuery 1.7+
$(function () {
    $('a.something').on("click", function (e) {
        e.preventDefault();
    });
});

// jQuery < 1.7
$(function () {
    $('a.something').click(function (e) {
        e.preventDefault();
    });

    // or 

    $('a.something').bind("click", function (e) {
        e.preventDefault();
    });
});

Voir:

http://docs.jquery.com/Events/jQuery.Event#event.preventDefault.28.29

Voir aussi cette question précédente sur les DONC:

jQuery désactiver un lien

115voto

AgileJon Points 20497

L'application sur laquelle je travaille actuellement le fait avec un style CSS en combinaison avec le javascript.

 a.disabled { color:gray; }
 

Ensuite, chaque fois que je veux désactiver un lien, j'appelle

 $('thelink').addClass('disabled');
 

Ensuite, dans le gestionnaire de clics pour 'thelink' une balise, je lance toujours une première vérification

 if ($('thelink').hasClass('disabled')) return;
 

40voto

Michael Meadows Points 15277

J'ai trouvé une réponse que j'aime beaucoup mieux ici

Ressemble à ça:

 $(document).ready(function(){
    $("a").click(function () { 
        $(this).fadeTo("fast", .5).removeAttr("href"); 
    });
});
 

L'activation impliquerait la définition de l'attribut href

 $(document).ready(function(){
    $("a").click(function () { 
        $(this).fadeIn("fast").attr("href", "http://whatever.com/wherever.html"); 
    });
});
 

Cela vous donne l'apparence que l'élément d'ancrage devient un texte normal et vice versa.

12voto

AlexC Points 5215
$("a").click(function(){
                alert('disabled');
                return false;

});

12voto

Michal B. Points 3013

Je pense qu'une solution plus intéressante consiste à définir l'attribut de données désactivé et à en vérifier la valeur par clic. De cette façon, nous pouvons désactiver temporairement une ancre jusqu'à ce que le javascript soit terminé avec un appel ajax ou des calculs. Si nous ne le désactivons pas, nous pouvons rapidement cliquer dessus quelques fois, ce qui est indésirable ...

 $('a').live('click', function () {
    var anchor = $(this);

    if (anchor.data("disabled")) {
        return false;
    }

    anchor.data("disabled", "disabled");

    $.ajax({
        url: url,
        data: data,
        cache: false,
        success: function (json) {
            // when it's done, we enable the anchor again
            anchor.removeData("disabled");
        },
        error: function () {
             // there was an error, enable the anchor
            anchor.removeData("disabled");
        }
    });

    return false;
});
 

J'ai fait un exemple jsfiddle: http://jsfiddle.net/wgZ59/76/

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