Merci pour toute votre réponse, cela ne fonctionne toujours pas, alors pouvez-vous s'il vous plaît le faire fonctionner avec la fonction document.ready
Senthil Kumar Bhaskaran
Cela peut aider si vous publiez l'extrait de code qui ne fonctionne pas.
Hourra Im Helping
En fait, mon codage est dans Rails et mon codage est <% = foo.add_associated_link ('Add email', @ project.email.build)%> quand je le rend dans le navigateur, je peux voir l'e-mail mais je ne peux pas le désactiver même si essayé avec un codage tel que e.preventDefault () mais sans résultat
Senthil Kumar Bhaskaran
Réponses:
194
Pour empêcher une ancre de suivre le spécifié href, je suggérerais d'utiliser preventDefault():
J'ai essayé avec ces "attr", cela ne fonctionne que sur l'élément de formulaire et non sur la balise Anchor.
Senthil Kumar Bhaskaran
1
@senthil - preventDefault est considéré comme la `` bonne '' façon de faire cela, voir ma modification (lien vers un autre Q + A)
karim79
En fait, mon codage est dans Rails et mon codage est <% = foo.add_associated_link ('Add email', @ project.email.build)%> quand je le rend dans le navigateur, je peux voir l'e-mail mais je ne peux pas le désactiver même si essayé avec un codage tel que e.preventDefault () mais sans résultat
Senthil Kumar Bhaskaran
2
comment inverser $('a.something').on("click", function (e) { e.preventDefault(); });?
ア レ ッ ク ス
2
Pas d'accord, utilisez CSS "pointer-events: none;" au lieu de cela, tout comme dans d'autres unswers.
vitrilo
116
L'application sur laquelle je travaille actuellement le fait avec un style CSS en combinaison avec javascript.
a.disabled { color:gray;}
Ensuite, chaque fois que je veux désactiver un lien que j'appelle
$('thelink').addClass('disabled');
Ensuite, dans le gestionnaire de clics pour 'thelink' une balise, j'exécute toujours une vérification en premier
Cette dernière ligne ne devrait-elle pas dire "return false;"?
Prestaul
1
Bon appel, Prestaul. Lorsqu'il est lié à une balise <a>, j'utilise: <a href="wwhat" onclick="return disableLink(this)"> .. then: function disableLink (node) {if (dojo.hasClass (node, 'disabled') return false; dojo.addClass (node, 'disabled'); return true;} .. cela permet de cliquer une fois sur le lien et d'action (return true) et après cela il n'autorise pas l'action (retourne false).
Neek
Notez que dans le gestionnaire, vous devriez probablement utiliser $ (this) au lieu de $ ("thelink") car cela pourrait changer ou l'utilisateur pourrait ainsi facilement copier / coller le code.
Alexis Wilke
2
Vous suggérons également d'ajouter «curseur: par défaut» au style désactivé.
Stuart Hallows
40
J'ai trouvé une réponse que j'aime beaucoup mieux ici
Je pense qu'une meilleure solution consiste à définir l'attribut de données désactivé et à ancrer une vérification pour celui-ci au clic. De cette façon, nous pouvons désactiver temporairement une ancre jusqu'à ce que, par exemple, le javascript soit terminé avec un appel ajax ou certains calculs. Si nous ne le désactivons pas, nous pouvons rapidement cliquer dessus quelques fois, ce qui n'est pas souhaitable ...
$('a').live('click',function(){var anchor = $(this);if(anchor.data("disabled")){returnfalse;}
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");}});returnfalse;});
De plus, avec les événements de pointeur, vous n'aurez pas besoin d'inclure l'état: hover car il s'agit d'un événement de pointeur. Il vous suffit d'inclure le sélecteur a [désactivé].
Vous n'avez jamais vraiment spécifié comment vous vouliez les désactiver, ou ce qui provoquerait la désactivation.
Tout d'abord, vous voulez savoir comment définir la valeur sur désactivé, pour cela, vous utiliseriez les fonctions d'attribut de JQuery , et que cette fonction se produise sur un événement , comme un clic , ou le chargement du document.
Pour les situations où vous devez placer du texte ou du contenu html dans une balise d'ancrage, mais vous ne voulez tout simplement pas qu'une action soit entreprise lorsque vous cliquez sur cet élément (comme lorsque vous voulez qu'un lien de pagination soit à l'état désactivé car il est la page courante), découpez simplement le href. ;)
<a>3 (current page, I'm totally disabled!)</a>
La réponse de @ michael-meadows m'a averti, mais il traitait toujours de scénarios dans lesquels vous devez / travaillez toujours avec jQuery / JS. Dans ce cas, si vous avez le contrôle sur l'écriture du html lui-même, il vous suffit de xer la balise href, la solution est donc purement HTML!
D'autres solutions sans jQuery finagling qui conservent le href vous obligent à mettre un # dans le href, mais cela fait rebondir la page vers le haut, et vous voulez juste qu'elle soit complètement désactivée. Ou le laisser vide, mais selon le navigateur, cela fait toujours des choses comme sauter vers le haut, et c'est du HTML invalide selon les IDE. Mais apparemment, une abalise est du HTML totalement valide sans HREF.
Enfin, vous pourriez dire: D'accord, pourquoi ne pas simplement vider complètement le tag a? Parce que souvent vous ne pouvez pas, la abalise est utilisée à des fins de style dans le framework CSS ou le contrôle que vous utilisez, comme le paginateur de Bootstrap:
Si vous n'en avez pas besoin pour se comporter comme une balise d'ancrage, je préférerais le remplacer du tout. Par exemple, si votre balise d'ancrage est comme
puis en utilisant jquery, vous pouvez le faire lorsque vous avez besoin d'afficher du texte au lieu d'un lien.
var content = $(".MyLink").text();// or .html()
$(".MyLink").replaceWith("<div>"+ content +"</div>")
Ainsi, nous pouvons simplement remplacer la balise d'ancrage par une balise div. C'est beaucoup plus facile (juste 2 lignes) et sémantiquement correct aussi (parce que nous n'avons pas besoin d'un lien maintenant donc ne devrait pas avoir de lien)
Réponses:
Pour empêcher une ancre de suivre le spécifié
href
, je suggérerais d'utiliserpreventDefault()
:Voir:
http://docs.jquery.com/Events/jQuery.Event#event.preventDefault.28.29
Voir également cette question précédente sur SO:
jQuery désactiver un lien
la source
$('a.something').on("click", function (e) { e.preventDefault(); });
?L'application sur laquelle je travaille actuellement le fait avec un style CSS en combinaison avec javascript.
Ensuite, chaque fois que je veux désactiver un lien que j'appelle
Ensuite, dans le gestionnaire de clics pour 'thelink' une balise, j'exécute toujours une vérification en premier
la source
J'ai trouvé une réponse que j'aime beaucoup mieux ici
Ressemble à ça:
L'activation impliquerait de définir l'attribut href
Cela vous donne l'impression que l'élément d'ancrage devient du texte normal, et vice versa.
la source
la source
Je pense qu'une meilleure solution consiste à définir l'attribut de données désactivé et à ancrer une vérification pour celui-ci au clic. De cette façon, nous pouvons désactiver temporairement une ancre jusqu'à ce que, par exemple, le javascript soit terminé avec un appel ajax ou certains calculs. Si nous ne le désactivons pas, nous pouvons rapidement cliquer dessus quelques fois, ce qui n'est pas souhaitable ...
J'ai fait un exemple jsfiddle: http://jsfiddle.net/wgZ59/76/
la source
La réponse sélectionnée n'est pas bonne.
Utilisez le style CSS pointeur-événements . (Comme Rashad Annara l'a suggéré)
Voir MDN https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events . Il est pris en charge dans la plupart des navigateurs.
L'ajout simple d'un attribut "désactivé" à l'ancre fera l'affaire si vous avez une règle CSS globale comme suit:
la source
Essayez les lignes ci-dessous
Coz, même si vous désactivez la
<a>
balisehref
fonctionnera donc vous devezhref
également supprimer .Lorsque vous voulez activer, essayez ci-dessous les lignes
la source
C'est aussi simple que de retourner false;
ex.
ou
la source
Dans un fichier css
la source
Si cette méthode est appelée, l'action par défaut de l'événement ne sera pas déclenchée.
la source
Si vous essayez de bloquer toute interaction avec la page, vous voudrez peut-être consulter le plug-in jQuery BlockUI
la source
Vous n'avez jamais vraiment spécifié comment vous vouliez les désactiver, ou ce qui provoquerait la désactivation.
Tout d'abord, vous voulez savoir comment définir la valeur sur désactivé, pour cela, vous utiliseriez les fonctions d'attribut de JQuery , et que cette fonction se produise sur un événement , comme un clic , ou le chargement du document.
la source
Pour les situations où vous devez placer du texte ou du contenu html dans une balise d'ancrage, mais vous ne voulez tout simplement pas qu'une action soit entreprise lorsque vous cliquez sur cet élément (comme lorsque vous voulez qu'un lien de pagination soit à l'état désactivé car il est la page courante), découpez simplement le href. ;)
La réponse de @ michael-meadows m'a averti, mais il traitait toujours de scénarios dans lesquels vous devez / travaillez toujours avec jQuery / JS. Dans ce cas, si vous avez le contrôle sur l'écriture du html lui-même, il vous suffit de xer la balise href, la solution est donc purement HTML!
D'autres solutions sans jQuery finagling qui conservent le href vous obligent à mettre un # dans le href, mais cela fait rebondir la page vers le haut, et vous voulez juste qu'elle soit complètement désactivée. Ou le laisser vide, mais selon le navigateur, cela fait toujours des choses comme sauter vers le haut, et c'est du HTML invalide selon les IDE. Mais apparemment, une
a
balise est du HTML totalement valide sans HREF.Enfin, vous pourriez dire: D'accord, pourquoi ne pas simplement vider complètement le tag a? Parce que souvent vous ne pouvez pas, la
a
balise est utilisée à des fins de style dans le framework CSS ou le contrôle que vous utilisez, comme le paginateur de Bootstrap:http://twitter.github.io/bootstrap/components.html#pagination
la source
Donc, avec une combinaison des réponses ci-dessus, je suis venu avec ceci.
la source
Si vous n'en avez pas besoin pour se comporter comme une balise d'ancrage, je préférerais le remplacer du tout. Par exemple, si votre balise d'ancrage est comme
puis en utilisant jquery, vous pouvez le faire lorsque vous avez besoin d'afficher du texte au lieu d'un lien.
Ainsi, nous pouvons simplement remplacer la balise d'ancrage par une balise div. C'est beaucoup plus facile (juste 2 lignes) et sémantiquement correct aussi (parce que nous n'avons pas besoin d'un lien maintenant donc ne devrait pas avoir de lien)
la source
Désactivez ou activez tout élément avec la propriété disabled.
la source