60 votes

désactiver un hyperlien à l'aide de jQuery

<a href="gohere.aspx" class="my-link">Click me</a>

Je l'ai fait.

$('.my-link').attr('disabled', true);

mais ça n'a pas marché

Existe-t-il un moyen simple de désactiver l'hyperlien à l'aide de jquery ? Supprimer le href ? Je préfère ne pas manipuler les href. Donc si je peux le faire sans supprimer le href, ce serait génial.

0 votes

123voto

Box9 Points 41987

Vous pouvez lier un gestionnaire de clics qui renvoie false :

$('.my-link').click(function () {return false;});

Pour le réactiver, il suffit de délier le gestionnaire :

$('.my-link').unbind('click');

Notez que disabled ne fonctionne pas car il est conçu pour les entrées de formulaire uniquement.


jQuery a déjà anticipé ce problème en fournissant un raccourci à partir de jQuery 1.4.3 :

$('.my-link').bind('click', false);

Et pour délier / réactiver :

$('.my-link').unbind('click', false);

5 votes

Avec la version 1.4.3 ou ultérieure, vous pouvez la raccourcir un peu avec $('.my-link').bind('click',false); .

4 votes

À partir de jQuery 1.7, bind() y unbind() ont été remplacés par on() y off() . Voir le docs pour plus d'informations.

1 votes

este Le poste a le moyen le plus simple d'utiliser bootstrap J'espère que cela vous aidera.

32voto

Luciano Mammino Points 492

Je sais que c'est une vieille question, mais elle ne semble toujours pas résolue. Voici ma solution...

Il suffit d'ajouter ce gestionnaire global :

$('a').click(function()
{
     return ($(this).attr('disabled')) ? false : true;
});

Voici une démonstration rapide : http://jsbin.com/akihik/3

vous pouvez même ajouter un peu de css pour donner un style différent à tous les liens avec l'attribut désactivé.

Par exemple

a[disabled]
{
    color: grey; 
}

Quoi qu'il en soit, il semble que l'attribut "désactivé" ne soit pas valide pour les éléments suivants a tags. Si vous préférez suivre les spécifications du W3C, vous pouvez facilement adopter un système conforme à la norme html5. data-disabled attribut. Dans ce cas, vous devez modifier le snippet précédent et utiliser $(this).data('disabled') .

1 votes

Je pense que cela devrait être : if ($(this).attr('disabled')) { e.stopImmediatePropagation() ; }

2 votes

De plus, pour s'assurer que les ancres ajoutées dynamiquement sont également désactivées, le code complet devrait être : $("body").on("click", "a", function (e) { if ($(this).attr('disabled')) { e.stopImmediatePropagation() ; } }) ;

1 votes

(Impossible de modifier le commentaire après 5 minutes). J'ai oublié d'ajouter : e.preventDefault() ;

12voto

Riley Dutton Points 2041

Retirer le href L'attribut semble définitivement la voie à suivre. Si, pour une raison quelconque, vous en avez besoin plus tard, je le stockerai simplement dans un autre attribut, par ex.

$(".my-link").each(function() {
    $(this).attr("data-oldhref", $(this).attr("href"));
    $(this).removeAttr("href");
});

C'est le seul moyen de faire en sorte que le lien apparaisse également désactivé sans avoir à écrire un CSS personnalisé. En liant simplement un gestionnaire de clic à false, le lien apparaîtra comme un lien normal, mais rien ne se produira lorsque vous cliquerez dessus, ce qui peut être déroutant pour les utilisateurs. Si vous optez pour le gestionnaire de clics, j'ajouterais au moins les éléments suivants .addClass("link-disabled") et écrivez une feuille de style en cascade qui fait apparaître les liens avec cette classe comme du texte normal.

0 votes

En retirant le href Le fait de laisser l'attribut et de le désactiver permettra aux robots de se rendre compte qu'il s'agit d'un lien.

8voto

Neil Points 2518
$('.my-link').click(function(e) { e.preventDefault(); }); 

Vous pourriez utiliser :

$('.my-link').click(function(e) { return false; }); 

Mais je n'aime pas l'utiliser moi-même car il est plus cryptique, même s'il est largement utilisé dans une grande partie du code de jQuery.

4voto

Abhishek Bandil Points 11
function EnableHyperLink(id) {
        $('#' + id).attr('onclick', 'Pagination("' + id + '")');//onclick event which u 
        $('#' + id).addClass('enable-link');
        $('#' + id).removeClass('disable-link');
    }

    function DisableHyperLink(id) {
        $('#' + id).addClass('disable-link');
        $('#' + id).removeClass('enable-link');
        $('#' + id).removeAttr('onclick');
    }

.disable-link
{
    text-decoration: none !important;
    color: black !important;
    cursor: default;
}
.enable-link
{
    text-decoration: underline !important;
    color: #075798 !important;
    cursor: pointer !important;
}

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