Angenommen, ich habe ein HTML-Formular. Jeder Eingang / select / Textfeld wird ein entsprechendes haben <label>
mit dem for
Attribut auf die ID des Begleiters es. In diesem Fall weiß ich, dass jeder Eingang nur eine einzige Bezeichnung hat.
Was ist bei einem Eingabeelement in Javascript - beispielsweise über ein Onkeyup-Ereignis - der beste Weg, um das zugehörige Label zu finden?
javascript
html
label
Joel Coehoorn
quelle
quelle
function getInputLabel(thisElement) { var theAssociatedLabel,elementID; elementID = thisElement.id; theAssociatedLabel = thisElement.parentNode.querySelector("label[for='" + elementID + "']"); console.log('theAssociatedLabel.htmlFor: ' + theAssociatedLabel.htmlFor); theAssociatedLabel.style.backgroundColor = "green";//Set the label background color to green };
Antworten:
Scannen Sie zunächst die Seite nach Beschriftungen und weisen Sie der Beschriftung aus dem eigentlichen Formularelement einen Verweis zu:
Dann können Sie einfach gehen:
Keine Notwendigkeit für ein Lookup-Array :)
quelle
Wenn Sie jQuery verwenden, können Sie so etwas tun
Wenn Sie jQuery nicht verwenden, müssen Sie nach dem Label suchen. Hier ist eine Funktion, die das Element als Argument verwendet und die zugehörige Bezeichnung zurückgibt
quelle
labels
Der HTML5-Standard enthält eine Eigenschaft, die auf Beschriftungen verweist, die einem Eingabeelement zugeordnet sind.Sie könnten also so etwas verwenden (Unterstützung für native
labels
Eigenschaften, aber mit einem Fallback zum Abrufen von Etiketten, falls der Browser dies nicht unterstützt) ...Noch einfacher, wenn Sie jQuery verwenden ...
quelle
Ich bin ein bisschen überrascht, dass niemand zu wissen scheint, dass Sie das perfekt dürfen :
Welche bekommen wird nicht durch eine der vorgeschlagenen Antworten aufhob, sondern wird die Eingabe korrekt beschriftet.
Hier ist ein Code, der diesen Fall berücksichtigt:
Verwendung:
Einige Notizen:
aria-labelledby
wenn Sie das verwenden würden (als Übung dem Leser überlassen).quelle
for
daslabel
Element immer ein Attribut enthält .Vorhin...
Später...
Snarky-Kommentar: Ja, Sie können dies auch mit JQuery tun. :-)
quelle
document.querySelector ("label [for =" + vHtmlInputElement.id + "]");
Dies beantwortet die Frage auf einfachste und schlankste Weise. Dies verwendet Vanille-Javascript und funktioniert auf allen richtigen Browsern des Mainstreams.
quelle
mit jquery könnte man so etwas machen
quelle
Wenn Sie bereit sind, querySelector zu verwenden (und dies sogar bis zu IE9 und manchmal bis zu IE8!), Ist eine andere Methode möglich.
Wenn Ihr Formularfeld eine ID hat und Sie das
for
Attribut der Bezeichnung verwenden , wird dies in modernem JavaScript ziemlich einfach:Einige haben über mehrere Etiketten bemerkt; Wenn alle den gleichen Wert für das
for
Attribut verwenden, verwenden Sie einfachquerySelectorAll
anstelle vonquerySelector
und durchlaufen Sie, um alles zu erhalten, was Sie benötigen.quelle
Dies hat mir geholfen, die Bezeichnung eines Eingabeelements anhand seiner ID zu ermitteln.
quelle
Die Antwort von Gijs war für mich am wertvollsten, aber leider funktioniert die Erweiterung nicht.
Hier ist eine umgeschriebene Erweiterung, die funktioniert. Sie kann jemandem helfen:
quelle
Alle anderen Antworten sind extrem veraltet !!
Alles was du tun musst, ist:
HTML5 wird bereits seit vielen Jahren von allen gängigen Browsern unterstützt. Es gibt absolut keinen Grund, dass Sie dies selbst von Grund auf neu machen oder es polyfill machen müssen! Im wahrsten Sinne des Wortes nur verwenden
input.labels
und es löst alle Ihre Probleme.quelle
input.labels
es nicht von IE oder Edge unterstützt, und Firefox hat gerade erst die Unterstützung hinzugefügt.Eine wirklich prägnante Lösung, die ES6-Funktionen wie Destrukturierung und implizite Renditen verwendet, um daraus einen praktischen Einzeiler zu machen, wäre:
Oder um einfach ein Label zu erhalten, keine NodeList:
quelle
Es ist tatsächlich viel einfacher, dem Etikett im Formular selbst eine ID hinzuzufügen, zum Beispiel:
Dann können Sie einfach so etwas verwenden:
Das Javascript muss sich in einer Body-Onload-Funktion befinden, um funktionieren zu können.
Nur ein Gedanke, funktioniert wunderbar für mich.
quelle
Wie bereits erwähnt, berücksichtigt die (derzeit) am besten bewertete Antwort nicht die Möglichkeit, eine Eingabe in ein Etikett einzubetten.
Da niemand eine JQuery-freie Antwort gepostet hat, ist hier meine:
In diesem Beispiel wird die Nachschlagetabelle der Einfachheit halber direkt durch die eingegebenen HTML-Elemente indiziert. Dies ist kaum effizient und Sie können es anpassen, wie Sie möchten.
Sie können ein Formular als Basiselement oder das gesamte Dokument verwenden, wenn Sie Beschriftungen für mehrere Formulare gleichzeitig erhalten möchten.
Es werden keine Überprüfungen auf falsches HTML durchgeführt (mehrere oder fehlende Eingaben in Beschriftungen, fehlende Eingaben mit der entsprechenden HTMLFor-ID usw.), aber Sie können sie gerne hinzufügen.
Möglicherweise möchten Sie die Beschriftungstexte zuschneiden, da häufig nachgestellte Leerzeichen vorhanden sind, wenn die Eingabe in die Beschriftung eingebettet ist.
quelle
Die beste Antwort funktioniert einwandfrei, aber in den meisten Fällen ist es übertrieben und ineffizient, alle
label
Elemente zu durchlaufen .Hier ist eine effiziente Funktion, um das zu erhalten
label
, was zuminput
Element gehört:Für mich war diese eine Codezeile ausreichend:
In den meisten Fällen befindet sich das
label
sehr nahe oder neben dem Eingang, was bedeutet, dass die Schleife in der obigen Funktion nur sehr wenige Male iteriert werden muss.quelle
Haben Sie versucht, document.getElementbyID ('id') zu verwenden, wobei id die ID des Etiketts ist oder die Situation ist, in der Sie nicht wissen, nach welcher Sie suchen
quelle
Verwenden Sie einen JQuery-Selektor:
quelle
Für zukünftige Suchende ... Das Folgende ist eine jQuery-ified-Version der von FlySwat akzeptierten Antwort:
Verwenden von:
quelle
for
Schleife vorbeieach()
? Warum dashtmlFor
stattattr("for")
?Ich weiß, dass dies alt ist, aber ich hatte Probleme mit einigen Lösungen und setzte diese zusammen. Ich habe dies unter Windows (Chrome, Firefox und MSIE) und OS X (Chrome und Safari) getestet und glaube, dass dies die einfachste Lösung ist. Es funktioniert mit diesen drei Arten des Anbringens eines Etiketts.
Verwenden von jQuery:
Meine JSFiddle: http://jsfiddle.net/pnosko/6PQCw/
quelle
Ich habe für meine eigenen Bedürfnisse gemacht, kann für jemanden nützlich sein: JSFIDDLE
quelle
Ich bin etwas überrascht, dass niemand vorschlägt, die CSS-Beziehungsmethode zu verwenden.
In einem Stylesheet können Sie über die Elementauswahl auf eine Beschriftung verweisen:
Wenn das Kontrollkästchen die ID 'XXX' hat, wird die Bezeichnung über jQuery gefunden von:
Sie können auch .find ('+ label') anwenden, um das Label von einem jQuery-Kontrollkästchen zurückzugeben, dh nützlich beim Schleifen:
quelle