131 votes

Comment désactiver un lien href en JavaScript ?

J'ai une étiquette <a href="#"> Previous </a> 1 2 3 4 <a href="#"> Next </a> et dans certaines conditions, je veux que cette balise soit complètement désactivée.

Code des commentaires (c'est ainsi que le lien est généré)

if (n_index != n_pages) 
    a = a+'<li><a href="#" onclick="javascript:paginateAjaxPage('+(n_index+1) +','+stype+');">></a></li><li><a href="#" onclick="javascript:paginateAjaxPage('+n_pages+','+stype+');" >>></a></li>'; 
else 
    a = a+'<li><a style="cursor: pointer;" onclick="return false;">></a></li><li><a style="cursor: pointer;" onclick="return false" >>></a></li>'; 
a = a+'</ul></div>';

0 votes

Dans certaines conditions, je veux que cette balise soit complètement désactivée. : Qu'est-ce que cela signifie ? Quelles sont les conditions ?

1 votes

Par "désactivé", vous voulez dire que vous voulez que le texte apparaisse toujours comme un lien (souligné et tout) mais qu'il ne fasse rien quand on clique dessus ?

0 votes

217voto

Pranay Rana Points 69934

Essayez ceci quand vous ne voulez pas que l'utilisateur soit redirigé sur le clic.

<a href="javascript: void(0)">I am a useless link</a>

62 votes

Et si <a href='javascript:;'>I am a shorter useless link</a> ?

20 votes

On n'a même pas besoin du point-virgule.

56 votes

Vous, les développeurs web, mettez des millions d'onglets \t les retours à la ligne \n et des espaces pour juste voir le code plié et agréable (pour qui ? le navigateur) et maintenant s'inquiètent de 7 octets void(0) et/ou un ; Oh, mon Dieu.

95voto

Vous pouvez désactiver tous les liens d'une page avec cette classe de style :

a {
    pointer-events:none;
}

maintenant, bien sûr, l'astuce consiste à désactiver les liens uniquement lorsque vous en avez besoin, voici comment faire :

utiliser une classe A vide, comme ceci :

a {}

puis quand vous voulez désactiver les liens, faites ceci :

    GetStyleClass('a').pointerEvents = "none"

    function GetStyleClass(className)
    {
       for (var i=0; i< document.styleSheets.length; i++) {
          var styleSheet = document.styleSheets[i]

          var rules = styleSheet.cssRules || styleSheet.rules

          for (var j=0; j<rules.length; j++) {
             var rule = rules[j]

             if (rule.selectorText === className) {
                return(rule.style)
             }
          }
       }

       return 0
    }

REMARQUE : Les noms des règles CSS sont transformés en minuscules dans certains navigateurs, et ce code est sensible à la casse, il est donc préférable d'utiliser des noms de classe en minuscules pour cela.

pour réactiver les liens :

GetStyleClass('a').pointerEvents = ""

consultez cette page http://caniuse.com/pointer-events pour des informations sur la compatibilité des navigateurs

Je pense que c'est la meilleure façon de le faire, mais malheureusement, IE, comme toujours, ne le permet pas :) Je poste quand même ce message, car je pense qu'il contient des informations qui peuvent être utiles, et parce que certains projets utilisent un navigateur connu, comme lorsque vous utilisez des vues web sur des appareils mobiles.

si vous voulez juste désactiver UN lien (je me suis seulement rendu compte que c'était la question), j'utiliserais une fonction qui définit manuellement l'url de la page actuelle, ou non, en fonction de cette condition. (comme la solution que vous avez acceptée)

cette question était beaucoup plus facile que je ne le pensais :)

8 votes

Je dois vous remercier pour le pointer-events:none; Je ne connaissais pas cette étiquette, c'est très pratique !

4 votes

C'est fantastique, mais il convient de noter que le système pointer-events n'est pas pris en charge par IE avant la version 11. caniuse.com/#feat=pointer-events

3 votes

J'ai essayé de le faire sur cette page en modifiant les styles globaux, mais je n'ai pas pu vous mettre en avant :)

15voto

tcooc Points 5006

Vous pouvez simplement lui donner un hash vide :

anchor.href = "#";

ou, si cela n'est pas suffisant pour "désactiver", utilisez un gestionnaire d'événements :

anchor.href = "javascript:void(0)";

27 votes

# n'est pas recommandé, pourquoi ? Considérez ceci, votre lien désactivé apparaît en bas/pied de page d'une longue page, cliquer sur le lien vous amènera en haut, "javascript: ;" est suffisant.

4 votes

Le numéro 1 ne revient pas en haut de la page.

5 votes

@Bixi, il défilera vers un élément avec un id de 1 si l'on en ajoute un plus tard.

4voto

dn3s Points 61
anchor.href = null;

6 votes

Chrome essaie de naviguer vers une page nommée null pour cette réponse maintenant

4voto

mVChr Points 26738

Le moyen le plus simple de désactiver un lien est tout simplement de ne pas l'afficher. Exécutez cette fonction chaque fois que vous voulez tester si votre condition est remplie pour masquer le bouton Précédent (remplacez if (true) avec votre état) :

var testHideNav = function() {
    var aTags = document.getElementsByTagName('a'),
        atl = aTags.length,
        i;

    for (i = 0; i < atl; i++) {
        if (aTags[i].innerText == "Previous") {
            if (true) { // your condition to disable previous
                aTags[i].style.visibility = "hidden";
            } else {
                aTags[i].style.visibility = "visible";
            }
        } else if (aTags[i].innerText == "Next") {
            if (false) { // your condition to disable next
                aTags[i].style.visibility = "hidden";
            } else {
                aTags[i].style.visibility = "visible";
            }
        }
    }
};

Ensuite, exécutez testHideNav() à chaque fois que vous devez faire le contrôle si votre état a changé.

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