1:id 就像身分證號,是唯一的,name就像姓名一樣可以同名
2:一個元素定義了 id,引用該元素時直接用 id 屬性,而 name 通常用在 form 中,且必須由 document.form.*** 而來,也就是說, name 屬性定義的元素在指令碼中是 document 對象的子物件。
3:name 用於 form 內元素,提交需要
id 用於 form 外元素好用因為 DOM 能直接取得單一元素
document.getElementById( "id_Number ") 得到的是單個元素
document.getElementsByName( "name ") 得到的是數組
4:id 每頁只能有一個
name 可以有多個
name 有些標籤不推薦用它
取得 id :document.getElementById( "idname ")
取得 name : document.getElementsByName( "name ")[0?1?2?3?....]
5: 表單元素 (form input textarea select) 與架構元素 (iframe frame) 用 name
這些元素都與表單 ( 架構元素作用於 form 的 target) 提交有關 , 在表單的接收頁面只
接收有 name 的元素 , 賦 ID 的元素通過表單是接收不到值的 , 你自己可以驗證一下 .
有一個例外 : A 可以賦 name 作為錨點 , 也可以賦 ID ;
只能賦 ID 不能賦 name 的元素 除去與表單相關的元素都只能賦 ID)
body li table tr td th p div span pre dl dt dd font b 等等。
6:幾乎每個做過 Web 開發的人都問過,到底元素的 ID 和 Name 有什麼區別阿?為什麼有了 ID 還要有 Name 呢 ? 而同樣我們也可以得到最 classical 的答案: ID 就像是一個人的社會安全號碼碼,而 Name 就像是他的名字, ID 顯然是唯一的,而 Name 是可以重複的。
上周我也遇到了 ID 和 Name 的問題,在頁面裡輸入了一個 input type= "hidden " ,唯寫了一個 ID= 'SliceInfo ' ,賦值後 submit ,在後台用 Request.Params[ "SliceInfo "] 卻怎麼也去不到值。後來恍然大悟因該用 Name 來標示,於是在 input 裡加了個 Name= 'SliceInfo ' ,就一切 ok 了。
第一段裡對於 ID 和 Name 的解答說的太籠統了,當然那個解釋對於 ID 來說是完全對的,它就是 Client 端 HTML 元素的 Identity 。而 Name 其實要複雜的多,因為 Name 有很多種的用途,所以它並不能完全由 ID 來代替,從而將其取消掉。
具體用途有:
用途 1: 作為可與伺服器互動資料的 HTML 元素的伺服器端的標示,比如 input 、 select 、 textarea 、和 button 等。我們可以在伺服器端根據其 Name 通過 Request.Params 取得元素提交的值。
用途 2: HTML 元素 Input type= 'radio ' 分組,我們知道 radio button 控制項在同一個分組類, check 操作是 mutex 的,同一時間只能選中一個 radio ,這個分組就是根據相同的 Name 屬性來實現的。
用途 3: 建立頁面中的錨點,我們知道 <a href= "URL "> link </a> 是獲得一個頁面超級連結,如果不用 href 屬性,而改用 Name ,如: <a name= "PageBottom "> </a> ,我們就獲得了一個頁面錨點。
用途 4: 作為對象的 Identity ,如 Applet 、 Object 、 Embed 等元素。比如在 Applet 對象執行個體中,我們將使用其 Name 來引用該對象。
用途 5: 在 IMG 元素和 MAP 元素之間關聯的時候,如果要定義 IMG 的作用區,需要使用其屬性 usemap ,使 usemap= "#name "( 被關聯的 MAP 元素的 Name) 。
用途 6: 某些特定元素的屬性,如 attribute ,和 param 。例如為 Object 定義參數 <PARAM NAME = "appletParameter " VALUE = "value "> 。
顯然這些用途都不是能簡單的使用 ID 來代替掉的,所以 HTML 元素的 ID 和 Name 的卻別並不是社會安全號碼碼和姓名這樣的區別,它們更本就是不同作用的東西。
當然 HTML 元素的 Name 屬性在頁面中也可以起那麼一點 ID 的作用,因為在 DHTML 對象樹中,我們可以使用 document.getElementsByName 來擷取一個包含頁面中所有指定 Name 元素的對象數組。
在這裡順便說一下,要是頁面中有 n(n> 1) 個 HTML 元素的 ID 都相同了怎麼辦?在 DHTML 對象中怎麼引用他們呢?如果我們使用 ASPX 頁面,這樣的情況是不容易發生的,因為 aspnet 進程在處理 aspx 頁面時根本就不允許有 ID 非唯一,這是頁面會被拋出異常而不能被正常的 render 。要是不是動態網頁面,我們硬要讓 ID 重複那 IE 怎麼搞呢?
這個時候我們還是可以繼續使用 document.getElementById 擷取對象,只不過我們只能擷取 ID 重複的那些對象中在 HTML Render 時第一個出現的對象。而這時重複的 ID 會在引用時自動變成一個數組, ID 重複的元素按 Render 的順序依次存在於數組中。