J'ai un bouton de lien à l'intérieur d'un <td>
que je dois désactiver. Cela fonctionne sur IE mais ne fonctionne pas sur Firefox et Chrome. La structure est - Lien à l'intérieur d'un <td>
. Je ne peux pas ajouter de conteneur dans <td>
(comme div / span)
J'ai essayé tout ce qui suit mais ne fonctionnais pas sur Firefox (en utilisant 1.4.2 js):
$(td).children().each(function () {
$(this).attr('disabled', 'disabled');
});
$(td).children().attr('disabled', 'disabled');
$(td).children().attr('disabled', true);
$(td).children().attr('disabled', 'true');
Remarque - Je ne peux pas désenregistrer la fonction de clic pour la balise d'ancrage car elle est enregistrée dynamiquement. ET JE DOIS MONTRER LE LIEN EN MODE HANDICAPÉ.
javascript
jquery
html
css
Ankit
la source
la source
Réponses:
Vous ne pouvez pas désactiver un lien (de manière portable). Vous pouvez utiliser l'une de ces techniques (chacune avec ses propres avantages et inconvénients).
Manière CSS
Cela devrait être la bonne façon (mais voir plus loin) de le faire lorsque la plupart des navigateurs le prendront en charge:
C'est ce que fait, par exemple, Bootstrap 3.x. Actuellement (2016), il est bien pris en charge uniquement par Chrome, FireFox et Opera (19+). Internet Explorer a commencé à prendre en charge cela à partir de la version 11, mais pas pour les liens, mais il est disponible dans un élément externe comme:
Avec:
solution de contournement
Nous devons probablement définir une classe CSS,
pointer-events: none
mais que faire si nous réutilisons l'disabled
attribut au lieu d'une classe CSS? À proprement parler, cedisabled
n'est pas pris en charge,<a>
mais les navigateurs ne se plaindront pas d' attributs inconnus . L'utilisation de l'disabled
attribut IE ignorerapointer-events
mais il honorera l'disabled
attribut spécifique IE ; les autres navigateurs compatibles CSS ignoreront les attributs et l'honneur inconnus . Plus facile à écrire qu'à expliquer:disabled
pointer-events
Une autre option pour IE 11 consiste à définir
display
des éléments de lien versblock
ouinline-block
:Notez que cela peut être une solution portable si vous devez prendre en charge IE (et vous pouvez changer votre HTML) mais ...
Tout cela dit, veuillez noter que
pointer-events
ne désactive que ... les événements de pointeur. Les liens seront toujours navigables via le clavier, vous devez également appliquer l'une des autres techniques décrites ici.Concentrer
En conjonction avec la technique CSS décrite ci-dessus, vous pouvez utiliser
tabindex
de manière non standard pour empêcher la focalisation d'un élément:Je n'ai jamais vérifié sa compatibilité avec de nombreux navigateurs, alors vous voudrez peut-être le tester par vous-même avant de l'utiliser. Il a l'avantage de fonctionner sans JavaScript. Malheureusement (mais évidemment)
tabindex
ne peut pas être changé depuis CSS.Intercepter les clics
Utilisez a
href
pour une fonction JavaScript, vérifiez la condition (ou l'attribut désactivé lui-même) et ne faites rien au cas où.Pour désactiver les liens, procédez comme suit:
Pour les réactiver:
Si vous le souhaitez,
.is("[disabled]")
vous pouvez utiliser.attr("disabled") != undefined
(jQuery 1.6+ retournera toujoursundefined
lorsque l'attribut n'est pas défini) maisis()
est beaucoup plus clair (merci à Dave Stewart pour cette astuce). Veuillez noter ici que j'utilise l'disabled
attribut d'une manière non standard, si vous vous souciez de cela, remplacez l'attribut par une classe et remplacez.is("[disabled]")
par.hasClass("disabled")
(en ajoutant et en supprimant avecaddClass()
etremoveClass()
).Zoltán Tamási a noté dans un commentaire que "dans certains cas, l'événement click est déjà lié à une fonction" réelle "(par exemple en utilisant knockoutjs) Dans ce cas, la commande du gestionnaire d'événements peut causer des problèmes. faux gestionnaire à l'lien
touchstart
,mousedown
et leskeydown
événements. il a quelques inconvénients (elle permet d' éviter le défilement tactile a commencé sur le lien) » , mais la gestion des événements de clavier a également l'avantage d'éviter la navigation du clavier.Notez que s'il
href
n'est pas effacé, il est possible que l'utilisateur visite manuellement cette page.Supprimer le lien
Effacez l'
href
attribut. Avec ce code, vous n'ajoutez pas de gestionnaire d'événements mais vous modifiez le lien lui-même. Utilisez ce code pour désactiver les liens:Et celui-ci pour les réactiver:
Personnellement, je n'aime pas beaucoup cette solution (si vous n'avez pas à en faire plus avec les liens désactivés) mais elle peut être plus compatible en raison des différentes manières de suivre un lien.
Gestionnaire de faux clics
Ajoutez / supprimez une
onclick
fonction où vousreturn false
, le lien ne sera pas suivi. Pour désactiver les liens:Pour les réactiver:
Je ne pense pas qu'il y ait une raison de préférer cette solution à la première.
Coiffant
Le style est encore plus simple, quelle que soit la solution que vous utilisez pour désactiver le lien, nous avons ajouté un
disabled
attribut afin que vous puissiez utiliser la règle CSS suivante:Si vous utilisez une classe au lieu d'un attribut:
Si vous utilisez un cadre d'interface utilisateur, vous pouvez constater que les liens désactivés ne sont pas correctement stylisés. Bootstrap 3.x, par exemple, gère ce scénario et le bouton est correctement stylisé à la fois avec
disabled
attribut et avec.disabled
classe. Si, au lieu de cela, vous effacez le lien (ou utilisez l'une des autres techniques JavaScript), vous devez également gérer le style car un<a>
sanshref
est toujours peint comme activé.Applications Internet riches accessibles (ARIA)
N'oubliez pas d'inclure également un attribut
aria-disabled="true"
avec l'disabled
attribut / classe.la source
td a
s qui pourraient être désactivés, qui appellerontevent.preventDefault()
si$(this).data('disabled')
est vrai, puis définiraisdata('disabled', true)
sur n'importe quel lien que je veux désactiver (false pour activer, etc.)$(this).is('[disabled]')
pourrait être une meilleure façon de détecter l'attribut désactivéVous avez le correctif dans CSS.
Au-dessus de css lorsqu'il est appliqué à la balise d'ancrage, l'événement de clic sera désactivé.
Pour plus de détails, consultez ce lien
la source
Merci à tous ceux qui ont publié des solutions (en particulier @AdrianoRepetti), j'ai combiné plusieurs approches pour fournir des
disabled
fonctionnalités plus avancées (et cela fonctionne sur plusieurs navigateurs). Le code est ci-dessous (ES2015 et coffeescript en fonction de vos préférences).Cela fournit plusieurs niveaux de défense afin que les ancres marquées comme désactivées se comportent réellement comme telles. En utilisant cette approche, vous obtenez une ancre que vous ne pouvez pas:
Comment
Incluez ce CSS, car il s'agit de la première ligne de défense. Cela suppose que le sélecteur que vous utilisez est
a.disabled
Ensuite, instanciez cette classe sur ready (avec le sélecteur optionnel):
Classe ES2015
npm install -S key.js
Classe Coffescript:
la source
Essayez l'élément:
La désactivation d'un lien fonctionne pour moi dans Chrome: http://jsfiddle.net/KeesCBakker/LGYpz/ .
Firefox ne semble pas bien jouer. Cet exemple fonctionne:
Remarque: ajout d'une déclaration «en direct» pour les futurs liens désactivés / activés.
Note2: changé «live» en «on».
la source
Bootstrap 4.1 fournit une classe nommée
disabled
et unaria-disabled="true"
attribut.exemple"
Plus d'informations sur getbootstrap.com
Donc, si vous voulez le faire dynamiquement, et
you don't want to care if it is button or ancor
que dans le script JS, vous avez besoin de quelque chose comme çaMais attention
La solution ne fonctionne que sur les liens avec les classes
btn btn-link
.Parfois, bootstrap recommande d'utiliser la
card-link
classe, dans ce cas, la solution ne fonctionnera pas .la source
Je me suis retrouvé avec la solution ci-dessous, qui peut fonctionner avec un attribut
<a href="..." disabled="disabled">
ou une classe<a href="..." class="disabled">
:Styles CSS:
Javascript (dans jQuery ready):
la source
vous ne pouvez pas désactiver un lien, si vous voulez que l' événement de clic ne doit pas tirer alors simplement
Remove
leaction
de ce lien.Pour plus d'informations: - Éléments pouvant être désactivés
la source
Je ferais quelque chose comme
quelque chose comme ça devrait fonctionner. Vous ajoutez une classe pour les liens que vous souhaitez désactiver, puis vous retournez false lorsque quelqu'un clique dessus. Pour les activer, supprimez simplement la classe.
la source
Pour désactiver le lien pour accéder à une autre page sur l'appareil tactile:
la source
setAttribute('href', '');
et l'URL de la page sonthttp://example.com/page/?query=something
le lien lorsque vous cliquez sur IE11, vous iriezhttp://example.com/page/
. Une solution de contournement pourrait être d'utilisersetAttribute('href', '#');
Dans Razor (.cshtml), vous pouvez faire:
la source
Vous pouvez l'utiliser pour désactiver l'hyperlien d'asp.net ou les boutons de lien en html.
la source
Il y a une autre voie possible, et celle que j'aime le plus. Fondamentalement, c'est la même manière que la lightbox désactive une page entière, en plaçant un div et en jouant avec z-index. Voici des extraits pertinents d'un de mes projets. Cela fonctionne dans tous les navigateurs !!!!!
Javascript (jQuery):
et en html
Ainsi, le resizer trouve les emplacements de l'ancre (les images ne sont que des flèches) et place le désactivateur sur le dessus. L'image du désactivateur est un carré gris translucide (changez la largeur / hauteur des désactiveurs dans le html pour correspondre à votre lien) pour montrer qu'il est désactivé. Le flottant permet à la page de se redimensionner dynamiquement, et les désactivateurs emboîteront le pas dans windowResizer (). Vous pouvez trouver des images appropriées via google. J'ai placé le CSS pertinent en ligne pour plus de simplicité.
puis basé sur une condition,
la source
Je pense que beaucoup d’entre eux sont trop réfléchis. Ajoutez une classe de tout ce que vous voulez, comme
disabled_link
.Ensuite, faites en sorte que le CSS ait
.disabled_link { display: none }
Boom maintenant, l'utilisateur ne peut pas voir le lien, vous n'aurez donc pas à vous soucier qu'il clique dessus. S'ils font quelque chose pour satisfaire le lien étant cliquable, il suffit de supprimer la classe avec jQuery:
$("a.disabled_link").removeClass("super_disabled")
. Boum fait!la source
$("td a").each(function(i,v){ $(this).data('href',this.href); $(this).attr('href','#').css('color','grey'); });
Ensuite, lorsque vous voulez en désactiver une:$(this).attr('href',$(this).data('href')).css('color','blue');