Was sind gültige / ungültige Namen für HTML-Formular-Tags in jQuery?

7

Dies ergibt sich aus dem Fehler, den ich hier durchlaufen habe jQuery $ ('form'). serialize () gibt nur ein Element eines serialisierten Formulars zurück , in dem ein Formular-Tag mit dem Namen" elements "steht:

%Vor%

verhindert den Zugriff auf alle benannten Elemente des Formulars mit jQuerys $ ('form'). serialize () (dh Sie erhalten "elements=", wo Sie "elements = & amp; e2=").

Ich hätte gerne allgemeinere Informationen über die richtigen "name" -Elemente von Formular-Tags. I.e. Was sind die nicht zulässigen Tags ("Elemente", "Name" usw.) und welche gültigen Zeichen für einen Namen sind? Sind diese Dinge in einem Standard oder einem Referenzhandbuch definiert oder ist es Versuch und Irrtum?

Gedanken und Input geschätzt.

Danke fürs Lesen.

    
Brian M. Hunt 23.05.2017, 12:04
quelle

9 Antworten

8

Neben dem, was Jonathan Sampson sagte, sollten Sie keine Namen verwenden, die für Formularobjekteigenschaften verwendet werden. Es gibt eine Liste im Mozilla Developer Center , die, wenn Sie genau hinsehen, ein% co_de enthält % Eigenschaft wichtig für Sie, da auf Formularelemente als direkte Attribute des Formularobjekts zugegriffen werden kann. Zum Beispiel in deinem Fall:

%Vor%

Achten Sie also darauf, keine Namen wie elements oder method zu verwenden, die auch mit dem Wert der Attribute action und method des Formularelements kollidieren. Ich hoffe du bist auf die Idee gekommen.

    
Ionuț G. Stan 25.11.2012, 21:03
quelle
6

Es gibt einen Unterschied zwischen "ungültigen" Namen und "genommenen" Namen in Bezug auf DOM-Eigenschaften.

Die Antwort von Jonathan Sampson ist gut, um "ungültige" Namen zu adressieren, aber basierend auf Ihrer vorherigen Frage, denken Sie nach "genommenen" Namen, wie in "was sind alle anderen DOM-Eigenschaften auf einem Formularknoten "

Die kurze Antwort ist: eine Menge.

Die lange Antwort ist im Grunde eine Summe dieser zwei Listen , dh "allen Knoten gemeinsame DOM-Eigenschaften" und "für Formularknoten eindeutige DOM-Eigenschaften"

Die großen Dinge, über die Sie sich wirklich Sorgen machen müssen, sind die zweite Liste - sie können brechen, wie Ihr Formular funktionieren soll.

    
Peter Bailey 09.05.2012 13:15
quelle
3

Es gibt eine Menge.

All dies sind gültige Methoden / Eigenschaften, die auf FORM-Elementen gefunden werden können (aufgrund der Vererbung der Schnittstelle), und alle davon können durch gleichnamige Felder überschrieben werden. Daher würde ich vorschlagen, diese Namen zu vermeiden, um nicht in zufällige Konflikte zu geraten:

%Vor%

Ich habe vor einiger Zeit auch einen Test für diese gemacht, der es erlaubt zu testen, wie sich verschiedene Browser verhalten diese Namen.

    
kangax 18.08.2009 20:35
quelle
2

Wenn Ihr Ziel darin besteht, Konflikte mit möglichen, bereits vorhandenen Eigenschaften des Formularobjekts in Javascript zu vermeiden, dann ist der offizielle Standard, nach dem Sie suchen, das Dokumentobjektmodell.

Wenn Sie experimentieren und sehen möchten, wie die integrierten Eigenschaften eines Formularobjekts in einem echten Browser sind, versuchen Sie Folgendes:

%Vor%

Beachten Sie jedoch, dass die überwiegende Mehrheit von diesen für Sie harmlos wäre, "zu überschreiben", und ich bin nicht einmal sicher, ob alle von ihnen außer Kraft gesetzt werden können.

    
Licky Lindsay 18.08.2009 19:21
quelle
2

Vielen Dank für die hilfreichen Antworten. Die Antworten scheinen darauf ausgerichtet zu sein, was auf dem DOM ist und sollten nicht verwendet werden (d. H. "Elemente" usw.). Der andere Teil der Frage ist, welche Zeichen erlaubt sind.

Ich habe die Spezifikation gefunden, welche Zeichen für Namenstoken in HTML4 , die sagt:

  

6.2 SGML-Basistypen

     

...

     
  • ID- und NAME-Tokens müssen mit einem Buchstaben ([A-Za-z]) beginnen und können durch eine beliebige Anzahl von Buchstaben, Ziffern ([0-9]), Bindestrichen ("-"), Unterstrichen (" _ "), Doppelpunkte (": ") und Punkte (". ").
  •   
    
Brian M. Hunt 18.08.2009 20:29
quelle
2

Alte Frage, gilt aber immer noch für diesen Tag ...

Bei Formularen können Sie keine Eingabe mit demselben Namen wie eine Formulareigenschaft an sich haben. Es gibt keine feste Einschränkung, aber was immer Sie tun, überschreibt die Attribute eines Formulars. Die Liste der Formularattribute ist umfangreich, variiert je nach Browser und JS-Engine und kann jederzeit ohne vorherige Ankündigung geändert werden. Daher wäre eine statische Liste nutzlos.

Der Eigenschaftswert eines Formulars wird mit einem Verweis auf ein Feld mit demselben Namen wie dieses Attribut überschrieben. IE: Wenn Sie ein Feld namens "action" haben, wird das action-Attribut des Formulars mit einem Verweis auf dieses Element namens "action" überschrieben. Ohne eine Eingabe namens "action": form.action ist eine URL. Mit einer Eingabe namens "action" ist form.action ein Element. Einige Erklärungen finden Sie hier: Warum JS Funktionsname Konflikte mit Element-ID? . "Name", "Aktion" oder "ID" könnte ein bevorzugter Name eines Formularfelds sein, und die JS-Welt hat das nie berücksichtigt.

Es gibt eine Sicherung von diesem vollständigen Fehler der JS-Welt: Es wird von einem Kommentator auf MSDN ( Ссылка ), um stattdessen die Methode getAttributeNode() des Formularobjekts zu verwenden, um den Formulareigenschaftswert real abzurufen. Funktioniert in FF Strom und IE ~ 7. Mit dieser Methode können Sie ein Feld mit demselben Namen wie ein Formularelementattribut haben. Dies sollte es ermöglichen, HTML / JS-Einschränkungen von APIs zu entkoppeln, die gleichzeitig verschiedene andere Client-Typen bedienen.

    
bob-the-destroyer 23.05.2017 12:20
quelle
1

Beginnen Sie nicht mit Zahlen ("1Cow"), verwenden Sie keine Interpunktion ("oneCow !?"), und schließen Sie keine Leerzeichen ein ("one Cow").

Es gibt Fälle, in denen Sie eckige Klammern [und] verwenden können, wenn Sie ein PHP-Programmierer sind und ein Array aus mehreren Elementen mit demselben Namen erstellen möchten.

%Vor%     
Jonathan Sampson 18.08.2009 19:14
quelle
0
___ answer1295947 ___

Es gibt einen Unterschied zwischen "ungültigen" Namen und "genommenen" Namen in Bezug auf DOM-Eigenschaften.

Die Antwort von Jonathan Sampson ist gut, um "ungültige" Namen zu adressieren, aber basierend auf Ihrer vorherigen Frage, denken Sie nach "genommenen" Namen, wie in "was sind alle anderen DOM-Eigenschaften auf einem Formularknoten "

Die kurze Antwort ist: eine Menge.

Die lange Antwort ist im Grunde eine Summe dieser zwei Listen , dh "allen Knoten gemeinsame DOM-Eigenschaften" und "für Formularknoten eindeutige DOM-Eigenschaften"

Die großen Dinge, über die Sie sich wirklich Sorgen machen müssen, sind die zweite Liste - sie können brechen, wie Ihr Formular funktionieren soll.

    
___ qstntxt ___

Dies ergibt sich aus dem Fehler, den ich hier durchlaufen habe jQuery $ ('form'). serialize () gibt nur ein Element eines serialisierten Formulars zurück , in dem ein Formular-Tag mit dem Namen" elements "steht:

%Vor%

verhindert den Zugriff auf alle benannten Elemente des Formulars mit jQuerys $ ('form'). serialize () (dh Sie erhalten "elements=", wo Sie "elements = & amp; e2=").

Ich hätte gerne allgemeinere Informationen über die richtigen "name" -Elemente von Formular-Tags. I.e. Was sind die nicht zulässigen Tags ("Elemente", "Name" usw.) und welche gültigen Zeichen für einen Namen sind? Sind diese Dinge in einem Standard oder einem Referenzhandbuch definiert oder ist es Versuch und Irrtum?

Gedanken und Input geschätzt.

Danke fürs Lesen.

    
___ answer1295929 ___

Neben dem, was Jonathan Sampson sagte, sollten Sie keine Namen verwenden, die für Formularobjekteigenschaften verwendet werden. Es gibt eine Liste im Mozilla Developer Center , die, wenn Sie genau hinsehen, ein% co_de enthält % Eigenschaft wichtig für Sie, da auf Formularelemente als direkte Attribute des Formularobjekts zugegriffen werden kann. Zum Beispiel in deinem Fall:

%Vor%

Achten Sie also darauf, keine Namen wie %code% oder %code% zu verwenden, die auch mit dem Wert der Attribute %code% und %code% des Formularelements kollidieren. Ich hoffe du bist auf die Idee gekommen.

    
___ answer1295924 ___

Wenn Ihr Ziel darin besteht, Konflikte mit möglichen, bereits vorhandenen Eigenschaften des Formularobjekts in Javascript zu vermeiden, dann ist der offizielle Standard, nach dem Sie suchen, das Dokumentobjektmodell.

Wenn Sie experimentieren und sehen möchten, wie die integrierten Eigenschaften eines Formularobjekts in einem echten Browser sind, versuchen Sie Folgendes:

%Vor%

Beachten Sie jedoch, dass die überwiegende Mehrheit von diesen für Sie harmlos wäre, "zu überschreiben", und ich bin nicht einmal sicher, ob alle von ihnen außer Kraft gesetzt werden können.

    
___ answer1296321 ___

Vielen Dank für die hilfreichen Antworten. Die Antworten scheinen darauf ausgerichtet zu sein, was auf dem DOM ist und sollten nicht verwendet werden (d. H. "Elemente" usw.). Der andere Teil der Frage ist, welche Zeichen erlaubt sind.

Ich habe die Spezifikation gefunden, welche Zeichen für Namenstoken in HTML4 , die sagt:

  

6.2 SGML-Basistypen

     

...

     
  • ID- und NAME-Tokens müssen mit einem Buchstaben ([A-Za-z]) beginnen und können durch eine beliebige Anzahl von Buchstaben, Ziffern ([0-9]), Bindestrichen ("-"), Unterstrichen (" _ "), Doppelpunkte (": ") und Punkte (". ").
  •   
    
___ answer1296033 ___

Es gibt eine Menge.

All dies sind gültige Methoden / Eigenschaften, die auf FORM-Elementen gefunden werden können (aufgrund der Vererbung der Schnittstelle), und alle davon können durch gleichnamige Felder überschrieben werden. Daher würde ich vorschlagen, diese Namen zu vermeiden, um nicht in zufällige Konflikte zu geraten:

%Vor%

Ich habe vor einiger Zeit auch einen Test für diese gemacht, der es erlaubt zu testen, wie sich verschiedene Browser verhalten diese Namen.

    
___ answer10098388 ___

Alte Frage, gilt aber immer noch für diesen Tag ...

Bei Formularen können Sie keine Eingabe mit demselben Namen wie eine Formulareigenschaft an sich haben. Es gibt keine feste Einschränkung, aber was immer Sie tun, überschreibt die Attribute eines Formulars. Die Liste der Formularattribute ist umfangreich, variiert je nach Browser und JS-Engine und kann jederzeit ohne vorherige Ankündigung geändert werden. Daher wäre eine statische Liste nutzlos.

Der Eigenschaftswert eines Formulars wird mit einem Verweis auf ein Feld mit demselben Namen wie dieses Attribut überschrieben. IE: Wenn Sie ein Feld namens "action" haben, wird das action-Attribut des Formulars mit einem Verweis auf dieses Element namens "action" überschrieben. Ohne eine Eingabe namens "action": %code% ist eine URL. Mit einer Eingabe namens "action" ist %code% ein Element. Einige Erklärungen finden Sie hier: Warum JS Funktionsname Konflikte mit Element-ID? . "Name", "Aktion" oder "ID" könnte ein bevorzugter Name eines Formularfelds sein, und die JS-Welt hat das nie berücksichtigt.

Es gibt eine Sicherung von diesem vollständigen Fehler der JS-Welt: Es wird von einem Kommentator auf MSDN ( Ссылка ), um stattdessen die Methode %code% des Formularobjekts zu verwenden, um den Formulareigenschaftswert real abzurufen. Funktioniert in FF Strom und IE ~ 7. Mit dieser Methode können Sie ein Feld mit demselben Namen wie ein Formularelementattribut haben. Dies sollte es ermöglichen, HTML / JS-Einschränkungen von APIs zu entkoppeln, die gleichzeitig verschiedene andere Client-Typen bedienen.

    
___ answer1295872 ___

Beginnen Sie nicht mit Zahlen ("1Cow"), verwenden Sie keine Interpunktion ("oneCow !?"), und schließen Sie keine Leerzeichen ein ("one Cow").

Es gibt Fälle, in denen Sie eckige Klammern [und] verwenden können, wenn Sie ein PHP-Programmierer sind und ein Array aus mehreren Elementen mit demselben Namen erstellen möchten.

%Vor%     
___ tag123jquery ___ jQuery ist eine beliebte Cross-Browser-JavaScript-Bibliothek, die das DOM-Traversal (Document Object Model), die Ereignisbehandlung, Animationen und AJAX-Interaktionen erleichtert, indem die Diskrepanzen zwischen Browsern minimiert werden. Eine mit jQuery gekennzeichnete Frage sollte mit jquery in Zusammenhang stehen, daher sollte jquery von dem fraglichen Code verwendet werden, und mindestens eine jquery-nutzungsbezogene Elemente müssen in der Frage enthalten sein. ___ tag123javascript ___ JavaScript (nicht zu verwechseln mit Java) ist eine dynamische Sprache mit mehreren Paradigmen auf hoher Ebene, die sowohl für das clientseitige als auch für das serverseitige Scripting verwendet wird. Verwenden Sie dieses Tag für Fragen zu ECMAScript und seinen verschiedenen Dialekten / Implementierungen (außer ActionScript und Google-Apps-Script). ___ antwort1295884 ___

Soweit mir bekannt ist, gibt es keine "reservierten Wörter" als solche, vorausgesetzt, dass die Kriterien bezüglich gültiger Zeichen (keine Leerzeichen, Interpunktion und müssen mit Buchstaben beginnen) erfüllt sind, kann das name-Attribut alles enthalten.

    
___ tag123html ___ HTML (Hyper Text Markup Language) ist die Standard-Auszeichnungssprache, die zum Strukturieren von Webseiten und zum Formatieren von Inhalt verwendet wird. HTML beschreibt die Struktur einer Website semantisch zusammen mit Hinweisen für die Präsentation, wodurch sie eine Markup-Sprache statt einer Programmiersprache wird. Die neueste Revision der HTML-Spezifikation ist HTML5.2. ___ answer1295923 ___

Angesichts Ihres anfänglichen Problems vermute ich, dass es nur Versuch und Irrtum ist, oder ein tiefes Wissen über die Bibliotheken, die Sie verwenden (was unrealistisch sein kann, gewährt).

Sicher, bleiben Sie mit Alpha-Zeichen, aber es sollte in Ordnung sein, an das Ende numerisch anzuhängen.

Ein Bugbear für viele Benutzer in ASP.NET, der dem Namens-Tag eine Dollar-Notation hinzufügt, könnte helfen, also könnten Sie es versuchen. Ich bin sicher interessiert, was passiert.

    
___ tag123forms ___ Ein Formular ist im Wesentlichen ein Container, der verwendet werden kann, um eine beliebige Menge einer Teilmenge mehrerer Datentypen zu speichern. HTML-Formulare werden verwendet, um Daten an einen Server zu übergeben. VB- und C # -Formulare sind die Fenster, die für die Interaktion mit dem Benutzer verwendet werden. ___ qstnhdr ___ Was sind gültige / ungültige Namen für HTML-Formular-Tags in jQuery? ___
tw39124 18.08.2009 19:12
quelle
0

Angesichts Ihres anfänglichen Problems vermute ich, dass es nur Versuch und Irrtum ist, oder ein tiefes Wissen über die Bibliotheken, die Sie verwenden (was unrealistisch sein kann, gewährt).

Sicher, bleiben Sie mit Alpha-Zeichen, aber es sollte in Ordnung sein, an das Ende numerisch anzuhängen.

Ein Bugbear für viele Benutzer in ASP.NET, der dem Namens-Tag eine Dollar-Notation hinzufügt, könnte helfen, also könnten Sie es versuchen. Ich bin sicher interessiert, was passiert.

    
James Wiseman 18.08.2009 19:21
quelle

Tags und Links