Ich mache folgendes:
<a href="www.stackoverflow.com">
<button disabled="disabled" >ABC</button>
</a>
Dies funktioniert gut, aber ich erhalte einen HTML5-Validierungsfehler, der besagt, dass "Element 'Schaltfläche' nicht in Element 'a Schaltfläche' verschachtelt sein darf.
Kann mir jemand einen Rat geben, was ich tun soll?
Antworten:
Nein , es ist kein gültiges HTML5 gemäß dem HTML5-Spezifikationsdokument von W3C :
Mit anderen Worten, Sie können alle Elemente in a verschachteln, mit
<a>
Ausnahme der folgenden:<a>
<audio>
(wenn das Steuerelementattribut vorhanden ist)<button>
<details>
<embed>
<iframe>
<img>
(wenn das usemap- Attribut vorhanden ist)<input>
(wenn sich das type- Attribut nicht im versteckten Zustand befindet)<keygen>
<label>
<menu>
(wenn das Typ - Attribut ist in der Werkzeugleiste Zustand)<object>
(wenn das usemap- Attribut vorhanden ist)<select>
<textarea>
<video>
(wenn das Steuerelementattribut vorhanden ist)Wenn Sie versuchen, eine Schaltfläche zu haben, die auf irgendwo verweist, wickeln Sie diese Schaltfläche
<form>
als solche in ein Tag ein:Wenn Ihr
<button>
Tag jedoch mit CSS gestaltet ist und nicht wie das Widget des Systems aussieht ... Tun Sie sich selbst einen Gefallen, erstellen Sie eine neue Klasse für Ihr<a>
Tag und gestalten Sie es auf die gleiche Weise.quelle
<div>
Innern einer<a>
absolut gültig in HTML5: validator.w3.org/nu/...Wenn Sie Bootstrap 3 verwenden , funktioniert dies recht gut
quelle
Nein.
Die folgende Lösung basiert auf JavaScript.
Wenn die Schaltfläche in einem vorhandenen
<form>
mit platziert werden sollmethod="post"
, stellen Sie sicher, dass die Schaltfläche das Attribut hat,type="button"
andernfalls sendet die Schaltfläche die POST-Operation. Auf diese Weise können Sie eine haben<form>
, die eine Mischung aus GET- und POST-Bedientasten enthält.quelle
<a>
Inside mit<button>
(mit dem gleichenhref
) als Backup, wenn JS deaktiviert ist, und in sechs Monaten wird es mir definitiv peinlich sein, dass ich das zugegeben habe.Ich bin gerade in das gleiche Problem gesprungen und habe es gelöst, indem ich das 'button'-Tag durch das' span'-Tag ersetzt habe. In meinem Fall verwende ich Bootstrap. So sieht es aus:
quelle
<a>
des Links andere Inhalte befinden , die Teil des Links sind, jedoch nicht wie eine Schaltfläche gestaltet sind. Zum Beispiel führt jeder Klick innerhalb einesdiv
(Bild, Hintergrund, Text usw.) zu einem Link, aber nur dasspan
sieht aus wie eine Schaltfläche.Es wäre wirklich komisch, wenn das gültig wäre, und ich würde erwarten, dass es ungültig ist. Was sollte es bedeuten, ein klickbares Element in einem anderen klickbaren Element zu haben? Was ist das - ein Button oder ein Link?
quelle
border: 2px outset
. Wenn Sie die Ecken etwas abrunden möchten, können Sie auch einen Randradius verwenden . Ein einfaches<img>
Tag würde auch gut funktionieren.Eine andere Option ist die Verwendung des onclick-Attributs der Schaltfläche:
Dies funktioniert jedoch, der Benutzer sieht den Link beim Schweben nicht so, wie wenn er sich innerhalb des Elements befinden würde.
quelle
Selbst wenn die Spezifikation dies nicht zulässt, scheint es heutzutage immer noch zu funktionieren, die Schaltfläche in ein
<a href...><button ...></a>
Tag einzubetten , FWIW ...quelle
<button>
nicht in a enthalten ist<form>
. Sobald die Schaltfläche enthalten ist (z. B.<form>...<a><button>
), funktioniert dies jedoch nicht mehr, es sei denn, man deaktiviert den On-Click-Handler der Schaltfläche. Dies ist genug Kreisel, um dieses Szenario zu vermeiden.Sie können der Schaltfläche eine Klasse hinzufügen und ein Skript einfügen, das sie umleitet.
Ich mache es so:
quelle
Warum nicht? Sie können auch ein Bild auf der Schaltfläche einbetten
quelle
Erklärung und Arbeitslösung hier: Howto: div mit onclick in einem anderen div mit onclick javascript
indem Sie dieses Skript in Ihrem inneren Klick-Handler ausführen:
quelle
In HTML5 ist es illegal, ein Schaltflächenelement in einen Link einzubetten.
Besser CSS in der Standardeinstellung verwenden und: aktive (gedrückte) Zustände:
quelle
Ich probiere Ihre Javascript-Lösungen aus, aber für die Arbeit muss ich die
e.preventDefault();
in meine Javascript-Funktion einfügen .quelle
Verwenden Sie das Formatierungsattribut innerhalb der Schaltfläche
PS! Es funktioniert nur, wenn Ihre Schaltfläche type = "submit"
quelle
quelle