3 Stimmen

Formularelemente als Eigenschaften des Formulars

Wenn Sie ein Formularelement innerhalb eines Formulars haben und dieses Element eine name o id können Sie direkt über das DOM-Element des Formulars als Eigenschaft mit diesem Namen darauf zugreifen. Dieses Verhalten scheint sehr breit abgestützt zu sein. Wird es von irgendeiner Spezifikation abgedeckt, und wenn ja, von welcher?

Dieses Verhalten für ein Formular elements Sammlung angegeben ist in der DOM2-HTML-Spezifikation, aber ich sehe nicht sofort, dass die Elemente als Eigenschaften des Formulars selbst irgendwo angegeben werden, es sei denn, der Satz "Es bietet direkten Zugriff auf die enthaltenen Formularsteuerelemente sowie auf die Attribute des Formularelements." aquí gemeint ist (wenn ja, wow, ist das subtil, ich lese es als Hinweis auf die elements Sammlung). Ich vermute, dass dies nur ein altes Verhalten ist.

Zur Klarstellung: Ich frage nicht, wie man am besten auf Formularfelder zugreift, sondern ob dieses Verhalten durch einen Standard abgedeckt ist. (Ich vermeide auch die ganze Sache mit den Dingen, die auf dem window Objekt; das ist ein ganz anderes Thema).

Beispiel ( Live-Kopie ):

HTML:

<form id="theForm">
<input type="text" name="field1" value="foo">
<input type="text" id="field2" value="bar">
</form>

JavaScript:

var f = document.getElementById("theForm");
console.log(f.elements.field1.value); // "foo", per spec
console.log(f.field1.value);          // also "foo"
console.log(f.elements.field2.value); // "bar", per spec
console.log(f.field2.value);          // also "bar"

Ich habe IE6, 7, 8 und 9, Firefox 4.0, Firefox 3.6, Chrome 12, Opera 11 und Safari 5 überprüft, und alle tun es (machen die Formularfelder an beiden Stellen verfügbar).

1voto

T.J. Crowder Punkte 948310

Gefunden im Entwurf der HTML5-Spezifikation :

Wenn ein form Element ist indiziert für die Suche nach indizierten Eigenschaften muss der User-Agent den Wert zurückgeben, der von der item Methode auf der elements Sammlung, wenn sie mit dem angegebenen Index als Argument aufgerufen wird.

Cada form Element hat eine Zuordnung von Namen zu Elementen, die Karte mit früheren Namen . Sie wird verwendet, um die Namen von Steuerelementen beizubehalten, auch wenn sie ihren Namen ändern.

Die unterstützten Eigenschaftsnamen sind die Vereinigung der Namen, die derzeit von dem Objekt unterstützt werden, das von der Funktion elements Attribut und die Namen, die sich derzeit in der Karte der vergangenen Namen befinden.

Wenn ein form Element ist indiziert für die Suche nach benannten Eigenschaften muss der User-Agent die folgenden Schritte ausführen:

  1. Si Name ist einer der unterstützten Eigenschaftsnamen des Objekts, das von der Methode elements Attribut, dann führen Sie diese Teilschritte aus:

    1. Sea Kandidat das Objekt sein, das von der Methode namedItem() Methode auf das Objekt, das von der elements Attribut bei der Übergabe des Name Argument.

    2. Si Kandidat ein Element ist, dann fügen Sie eine Abbildung von Name a Kandidat dans le form Elementes und ersetzt den vorherigen Eintrag mit demselben Namen, falls vorhanden.

    3. Rückkehr Kandidat und brechen Sie diese Schritte ab.

  2. Ansonsten, Name ist der Name eines der Einträge in der Datei form element's past names map: gibt das Objekt zurück, das mit Name in dieser Karte.

Wenn ein Element, das in der form Element wird aus der Karte der vergangenen Namen entfernt. Document ist, dann müssen seine Einträge aus der Karte entfernt werden.

...und wir wissen aus der Der Abschnitt der DOM2-HTML-Spezifikation über die ECMAScript-Sprachabbildung, die Indizierung über [] ist am Ende ein Aufruf zu entweder item (für Zahlen) oder namedItem (für Streicher).

Dank an @Carey für seine Antwort auf meine andere damit zusammenhängende Frage was mich zum Schmunzeln brachte und mich dazu veranlasste, im HTML5-Entwurf nachzuschauen, da sie versuchen, den HTML-DOM-Kram in die Spezifikation zu integrieren.

0voto

Dr.Molle Punkte 115139

Sie ist festgelegt in Netscapes Javascript-Referenz

0voto

Quentin Punkte 850700

De DOM 2 (meine Hervorhebung):

Das FORM-Element weist ein ähnliches Verhalten wie eine Sammlung und ein Element auf. Es bietet direkter Zugriff auf die enthaltenen Formularsteuerelemente sowie die Attribute des Formularelements.

Sie ist zwar etwas unscharf formuliert, aber sie deckt das von Ihnen beobachtete Verhalten ab.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X