Je fais ce qui suit:
<a href="www.stackoverflow.com">
<button disabled="disabled" >ABC</button>
</a>
Cela fonctionne bien, mais je reçois une erreur de validation HTML5 indiquant 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 devrais faire?
Non, le HTML5 n'est pas valide selon le Document de spécification HTML5 du W3C :
Modèle de contenu:Transparent , mais il ne doit y avoir aucun contenu interactif descendant.
L'élément a peut être entouré de paragraphes, de listes, de tableaux, etc., voire de sections entières, tant qu'il n'y a pas de contenu interactif (par exemple des boutons ou d'autres liens).
En d'autres termes, vous pouvez imbriquer n'importe quel élément dans un <a>
à l'exception des éléments 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 dans l'état masqué)
<keygen>
<label>
<menu>
(si l'attribut type est dans l'état 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 chose, placez-le dans une balise <form>
en tant que tel:
<form style="display: inline" action="http://example.com/" method="get">
<button>Visit Website</button>
</form>
Toutefois, si votre balise <button>
est stylée à l'aide de CSS et ne ressemble pas au widget du système ... Faites-vous une faveur, créez une nouvelle classe pour votre balise <a>
et modifiez-la de la même manière.
Si vous utilisez Bootstrap 3 , cela fonctionne assez bien
<a href="#" class="btn btn-primary btn-lg active" role="button">Primary link</a>
<a href="#" class="btn btn-default btn-lg active" role="button">Link</a>
Je viens juste de sauter dans le même problème et je l'ai résolu en substituant les balises 'button' à 'span'. Dans mon cas, j'utilise bootstrap. C'est à ça que ça ressemble:
<a href="#register">
<span class="btn btn-default btn-lg">
Subscribe
</span>
</a>
Non.
La solution suivante repose sur JavaScript.
<button type="button" onclick="location.href='http://www.stackoverflow.com'">ABC</button>
Si le bouton doit être placé dans un <form>
existant avec method="post"
, assurez-vous qu'il comporte l'attribut type="button"
, sinon le bouton soumettra l'opération POST. De cette façon, vous pouvez avoir un <form>
contenant une combinaison de boutons d’opération GET et POST.
Ce serait vraiment bizarre si cela était valable, et je m'attendrais à ce que ce soit invalide. Que devrait signifier avoir un élément cliquable dans un autre élément cliquable? De quoi s'agit-il - d'un bouton ou d'un lien?
Ces jours-ci, même si la spécification ne le permet pas, il semble "fonctionner" pour incorporer le bouton dans une balise <a href...><button ...></a>
, FWIW ...
Une autre option consiste à utiliser l'attribut onclick du bouton:
<button disabled="disabled" onClick="location.href='www.stackoverflow.com'" >ABC</button>
Cela fonctionne, cependant, l'utilisateur ne verra pas le lien affiché en survol comme s'il se trouvait dans l'élément.
pourquoi pas .. vous pouvez également incorporer l'image sur le bouton aussi bien
<FORM method = "POST" action = "https://stackoverflow.com">
<button type="submit" name="Submit">
<img src="img/Att_hack.png" alt="Text">
</button>
</FORM>
Explication et solution de travail ici: Howto: div avec onclick dans une autre div avec onclick javascript
en exécutant ce script dans votre gestionnaire de clics interne:
if (!e) var e = window.event;
e.cancelBubble = true;
if (e.stopPropagation) e.stopPropagation();
Vous pouvez ajouter une classe au bouton et mettre un script qui le redirige.
Je le fais de cette façon:
<button class='buttonClass'>button name</button>
<script>
$(".buttonClass').click(function(){
window.location.href = "http://stackoverflow.com";
});
</script>