Kann nur ein Etikett auf Eingabeelemente verweisen?
Frage
W3Schools dies zu sagen Etiketten :
Der
<label>
Tag definiert ein Etikett für eine Eingabe Element. [Hervorhebung von mir]
Bedeutet dies, dass die folgende HTML nicht gültig ist?
<!doctype html>
<html>
<head>
<title>Example document</title>
</head>
<body>
<label for="x">Label</label>
<hr>
<div id="q" contentEditable="true">Hello</div>
<hr>
<div id="x" contentEditable="true">World</div>
</body>
</html>
Sowohl Chrome und IE8 geben Fokus auf World
wenn Label
geklickt wird, tut Firefox nicht.
Was ist richtig?
Lösung
Nach dem W3C es gilt zur Form Controls und Form Controls sind definiert als :
- Buttons
- Ankreuzfelder
- Radio-Tasten
- Menüs
- Texteingabe
- Datei auswählen
- versteckte Kontrollen
- Object-Tags
So FireFox technisch richtig ist, obwohl ich es kaum betrachten würde zu „brechen“, wenn ein Browser sie beschränken sich nicht auf diese Elemente.
Andere Tipps
Die HTML-Spezifikation sagt, über label
das Attribut „for“, „Wenn sie vorhanden ist, wird der Wert dieses Attributs muss das gleiche wie der Wert des id-Attributs von einem anderen Steuer im selben Dokument sein. Wenn nicht vorhanden, das Etikett zu sein definiert ist, mit dem Elemente Inhalt zugeordnet ist. "
So ist die ID Referenzen in „für“ das ein Steuer sein sollten. Was ist eine Kontrolle? Die Spezifikation sagt im Grunde jede input
eine Kontrolle ist, wie button
ist, select
oder object
. So Firefox ist technisch recht - a. div
ist kein Steuer
Ich würde sagen, dass es keine angemessene Verwendung der Markup ist, weil Label Semantik ist, dass sie speziell für die Kontrollen sind.
Das LABEL-Element wird angegeben, Etiketten für die Kontrollen, die nicht über implizite Etiketten,
Die neueste WHATWG spec hat folgendes zu sagen:
Einige Elemente, nicht alle von ihnen form verbunden sind, werden als markierbare Elemente kategorisiert. Dies sind Elemente, die mit einem Label-Element zugeordnet werden können.
button
,input
(wenn dastype
Attribut ist nicht im versteckten Zustand),meter
,output
,progress
,select
,textarea
...
Das
for
Attribut kann angegeben werden, um eine Formularsteuerung, um anzuzeigen, mit dem die Beschriftung verknüpft werden soll. Wenn das Attribut angegeben ist, muss der Wert des Attributs die ID eines markierbaren Element im gleichen Baum wie daslabel
Element sein.
(Quelle: https://html.spec.whatwg.org/multipage/ Forms.html .)
Mit anderen Worten, nur der Standard erlaubt for
Attribute an Elementen eines der 7-Tag oben aufgeführten Typen zu zeigen. Der HTML-Code in der Frage ausgestellt (die ein for
Element verwendet, um einen editierbare div
zu-Punkt) ist daher technisch ungültig HTML unter dem aktuellen spec.
Die Nu Html Checker (die durch WHATWG unterstützt) zustimmt; wenn Sie es bitten, das HTML-Dokument von der Frage zu bestätigen, wird es sagen:
Fehler . Der Wert des
for
Attributs deslabel
Elements muss die ID einer nicht verborgen Form Kontrolle sein