Je fais ce qui suit:
<a href="www.stackoverflow.com">
<button disabled="disabled" >ABC</button>
</a>
Cela fonctionne bien mais j'obtiens une erreur de validation HTML5 qui dit que «l'élément 'bouton' ne doit pas être imbriqué dans l'élément 'un bouton'.
Quelqu'un peut-il me donner des conseils sur ce que je dois faire?
Réponses:
Non , ce n'est pas du HTML5 valide selon le document de spécification HTML5 du W3C :
En d'autres termes, vous pouvez imbriquer tous les éléments à l'intérieur d'un,
<a>
sauf les suivants:<a>
<audio>
(si l' attribut contrôles est présent)<button>
<details>
<embed>
<iframe>
<img>
(si l' attribut usemap est présent)<input>
(si l' attribut type n'est pas à l' état masqué )<keygen>
<label>
<menu>
(si l' attribut type est dans l' état de la barre d'outils )<object>
(si l' attribut usemap est présent)<select>
<textarea>
<video>
(si l' attribut contrôles est présent)Si vous essayez d'avoir un bouton qui renvoie à quelque part, enveloppez ce bouton dans une
<form>
balise en tant que telle:Cependant, si votre
<button>
balise est stylée en utilisant CSS et ne ressemble pas au widget du système ... Faites-vous une faveur, créez une nouvelle classe pour votre<a>
balise et stylisez-la de la même manière.la source
<div>
inside an<a>
est absolument valide en HTML5: validator.w3.org/nuSi vous utilisez Bootstrap 3 , cela fonctionne assez bien
la source
Non.
La solution suivante repose sur JavaScript.
Si le bouton doit être placé dans un
<form>
avec existantmethod="post"
, assurez-vous que le bouton a l'attributtype="button"
sinon le bouton soumettra l'opération POST. De cette façon, vous pouvez avoir un<form>
qui contient un mélange de boutons d'opération GET et POST.la source
<a>
intérieur<button>
(avec le mêmehref
) comme sauvegarde si JS est désactivé, et dans six mois, je vais certainement être gêné d'avoir admis cela.Je viens de sauter dans le même problème et je l'ai résolu en remplaçant la balise «bouton» par la balise «span». Dans mon cas, j'utilise bootstrap. C'est à ça que ça ressemble:
la source
<a>
, qui fait partie du lien, mais qui n'a pas le style d'un bouton. Par exemple, tout clic dans unediv
(image, arrière-plan, texte, etc.) mène à un lien, mais seul l'span
aspect ressemble à un bouton.Ce serait vraiment bizarre si cela était valide, et je m'attendrais à ce que ce soit invalide. Que devrait signifier avoir un élément cliquable à l'intérieur d'un autre élément cliquable? De quoi s'agit-il - un bouton ou un lien?
la source
border: 2px outset
. Si vous voulez arrondir un peu les coins, vous pouvez également utiliser un rayon de bordure. Une simple<img>
balise fonctionnerait bien aussi.Une autre option consiste à utiliser l'attribut onclick du bouton:
Cela fonctionne, cependant, l'utilisateur ne verra pas le lien affiché au survol comme il le ferait s'il était à l'intérieur de l'élément.
la source
Ces jours-ci, même si la spécification ne le permet pas, il "semble" toujours fonctionner pour intégrer le bouton dans une
<a href...><button ...></a>
balise, FWIW ...la source
<button>
n'est pas contenu dans un fichier<form>
. Cependant, dès que le bouton est contenu (par exemple,<form>...<a><button>
) cela cesse de fonctionner, sauf si l' on désactive le gestionnaire au clic du bouton. C'est assez de girations pour justifier d'éviter ce scénario.Vous pouvez ajouter une classe au bouton et mettre un script la redirigeant.
Je le fais de cette façon:
la source
pourquoi pas..vous pouvez également intégrer une image sur un bouton
la source
Explication et solution de travail ici: Howto: div avec onclick dans un autre div avec onclick javascript
en exécutant ce script dans votre gestionnaire de clics interne:
la source
Il est illégal en HTML5 d'incorporer un élément de bouton dans un lien.
Mieux vaut utiliser CSS par défaut et: états actifs (pressés):
la source
J'essaye vos solutions javascript mais, pour le travail, je dois insérer le
e.preventDefault();
dans ma fonction javascript.la source
Utiliser l'attribut formaction à l'intérieur du bouton
PS! Cela ne fonctionne que si votre bouton type = "soumettre"
la source
la source