簡體   English   中英

jQuery中HTML表單標記的有效/無效名稱是什么?

[英]What are valid / invalid names for HTML form tags in jQuery?

這是從我遇到的錯誤流向jQuery $('form')。serialize()只返回一個表單序列化的元素,其中有一個名為“elements”的表單標簽,如下所示:

<form>
<input name="elements"/>
<input name="e2"/>
</form>

使用jQuery的$('form')來阻止你訪問表單的所有命名元素.serialize() (即你得到“elements =”,你應該得到“elements =&e2 =”)。

我想了解更多關於表單標簽的正確“名稱”元素的一般信息。 即什么是禁區標簽(“元素”,“名稱”等),以及名稱的有效字符是什么。 這些內容是在標准或參考手冊中定義的,還是試驗和錯誤?

思想和投入贊賞。

謝謝閱讀。

除了Jonathan Sampson所說的,你不應該使用用於表單對象屬性的名稱。 Mozilla開發人員中心一個列表 ,如果您仔細查看包含對您很重要的elements屬性,因為表單元素可以作為表單對象的直接屬性進行訪問。 例如在你的情況下:

form.elements; // collides with the built-in elements property
form.e2;

因此,請注意不要使用類似methodaction名稱,這些名稱也會與表單元素的methodaction屬性的值相沖突。 我希望你有這個主意。

對於DOM屬性,“無效”名稱和“已采用”名稱之間存在差異。

Jonathan Sampson的答案很好地解決了“無效”名稱,但根據您之前的問題,您所問的是“采用”名稱,例如“表單節點上的所有其他DOM屬性是什么?”

簡短的回答是:很多。

長答案基本上是這兩個 列表的總和,即“所有節點共有的DOM屬性”和“形成節點唯一的DOM屬性”

你真正想要擔心的最重要的是第二個列表 - 它們可以打破你的表單應該如何運作。

有很多。

所有這些都是可以在FORM元素上找到的有效方法/屬性(由於接口繼承),並且所有這些方法/屬性都可以被同名字段覆蓋。 因此,我建議避免使用這些名稱,而不是遇到意外沖突:

Node interface members

ELEMENT_NODE
ATTRIBUTE_NODE
TEXT_NODE
CDATA_SECTION_NODE
ENTITY_REFERENCE_NODE
ENTITY_NODE
PROCESSING_INSTRUCTION_NODE
COMMENT_NODE
DOCUMENT_NODE
DOCUMENT_TYPE_NODE
DOCUMENT_FRAGMENT_NODE
NOTATION_NODE
nodeName
nodeValue
nodeType
parentNode
childNodes
firstChild
lastChild
previousSibling
nextSibling
attributes
ownerDocument
insertBefore
replaceChild
removeChild
appendChild
hasChildNodes
cloneNode
normalize
isSupported
namespaceURI
prefix
localName
hasAttributes

HTMLElement interface members

id
title
lang
dir
className

HTMLFormElement interface members

elements
length
name
acceptCharset
action
enctype
method
target
submit
reset
item
namedItem

我之前也對這些進行了測試 ,它允許測試不同的瀏覽器如何“表現”這些名稱。

古代問題,但仍適用於這一天......

對於表單,您不能擁有與表單屬性本身相同名稱的輸入。 沒有嚴格的限制,但無論你做什么都會覆蓋表單的屬性。 表單屬性列表很廣泛,因瀏覽器和JS引擎而異,並且可能隨時更改,恕不另行通知。 因此,靜態列表是沒有用的。

表單的屬性值將被對與該屬性同名的任何字段的引用覆蓋。 IE:如果你有一個名為“action”的字段,那么表單的action屬性將被一個名為“action”的元素的引用覆蓋。 沒有名為“action”的輸入: form.action是一個URL。 使用名為“action”的輸入form.action是一個元素。 這里有一些解釋: 為什么JS函數名稱與元素ID沖突? “name”,“action”或“id”可能是表單字段的首選名稱,JS世界從未考慮過這一點。

JS世界的這個徹底失敗有一個保存:MSDN上的評論者注意到它( http://msdn.microsoft.com/en-us/library/ie/ms536429%28v=vs.85%29。 aspx )改為使用表單對象的getAttributeNode()方法來獲取真實的表單屬性值。 適用於FF電流和IE~7。 使用此方法,您可以擁有一個與表單元素屬性同名的字段。 這應該允許人們從API同時為各種其他客戶端類型提供HTML / JS限制。

如果您的目標是避免與javascript中表單對象的任何可能的預先存在的屬性沖突,那么我認為您正在尋找的官方標准是文檔對象模型。

如果您想要實驗並查看表單對象的內置屬性在真正的broswer中,請嘗試以下操作:

<html><body onLoad="showEm()">
<form id="foo"></form>

<script>
function showEm() {
    for(var e in document.getElementById("foo")) {
      document.writeln(e);
      document.writeln("<br>");
    }
}
</script>

<body>
</html>

但請注意,絕大多數這些對你來說都是無害的“覆蓋”,我甚至不確定是否所有這些都可以被覆蓋。

謝謝大家的有用答案。 答案似乎是針對DOM上的內容並且不應該使用(即“元素”等)。 問題的另一部分是允許使用哪些字符。

我已經找到了HTML4中允許使用哪些字符作為名稱標記的規范,其中說:

6.2 SGML基本類型

...

  • ID和NAME令牌必須以字母([A-Za-z])開頭,后面可以跟任意數量的字母,數字([0-9]),連字符(“ - ”),下划線(“_”) ,冒號(“:”)和句號(“。”)。

不要以數字(“1Cow”)開頭,不要使用標點符號(“oneCow!?”),也不要包含空格(“一只牛”)。

在某些情況下,如果您是PHP程序員並且希望從多個共享相同名稱的元素創建數組,則可以使用方括號[和]。

<input name='colors[]' value='blue'  />
<input name='colors[]' value='black' />

據我所知,這里沒有“保留字”,因此如果符合有效字符的標准(沒有空格,標點符號並且必須以字母開頭),則name屬性可以包含任何內容。

鑒於您的初始問題,我懷疑它只是試驗和錯誤,或者您正在使用的庫的深入了解(這可能是不現實的,被授予)。

當然,堅持使用字母字符,但是應該可以將數字追加到最后。

ASP.NET中許多人為名稱標簽添加美元符號的bug可能會有所幫助,所以你可以嘗試一下。 我當然有興趣看看會發生什么。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM