2014-02-27 82 views
7

我的控件是根據用戶輸入動態構建的,還有n其ID也是動態的文本框。Html重複「ID」

但是,我沒有預見到這個HTML會在同一個html頁面的其他地方重複使用。

我現在面臨的問題是重複的ID,這導致我的jQuery功能無法正常工作。

我知道ID應該是唯一的,但是,我可以通過使用具有不同ID的最外層<div>來避免此問題嗎?

那裏的專家可以給我一些很好的建議嗎?

P.S.我正在尋找一個有效的解決方案,因爲如果我需要更改每個元素的ID,那麼在我的jQuery中需要很多工作。

請幫忙。謝謝!

<div id="Container1"> 
     <div id="Control"> 
      <input type="text" id="TextBox1" /> 
      <input type="text" id="TextBox2" /> 
     </div> 
    </div> 

    <div id="Container2"> 
     <div id="Control"> 
      <input type="text" id="TextBox1" /> 
      <input type="text" id="TextBox2" /> 
     </div> 
    </div> 

我想知道如果在jQuery的功能,我可以這樣做..在選擇#container1 > #textbox1

+0

如果你不能與類名解決它,你可以添加一個遞增的數字追加到ID,如果動態創建的投入! – goseo

回答

14

你絕對不應該有重複的ID。它可能工作*,但它是語義上不正確和你不應該這樣做

你應該調整你的jQuery,然而多,可能發臭。最好的選擇是使用一個類,也許使用父級的特定ID來指定你想要哪一個

另一個不太有吸引力但可行的方法是在ID的末尾添加一個數字或某物它獨特然後使用jQuery來檢測任何元素與ID

*的特定部分 - 如阿倫介紹jQuery將接受選擇,但它是有利的,因爲它是不正確

+0

我也建議使用類:] –

+1

@AdamMerrifield「當然,我是在更新的過程中(: –

+1

嗯......從技術上來講,你可以* *做重複的ID喜歡的東西'$(工作」 [ID =」但是這是一個非常可怕的想法 – zzzzBov

2

我建議你使用class而不是id。重複id s不是一個好習慣。

1

您不能有多次相同的id。改爲使用class

3

即使是錯誤沒有什麼錯與jQuery的選擇

$('#Container1 #TextBox1').val(1) 
$('#Container2 #TextBox1').val(2) 

演示:Fiddle


一個更好的選擇將是使用屬性選擇

$('#Container1 input[id="TextBox1"]').val(1) 
$('#Container2 input[id="TextBox1"]').val(2) 

演示:Fiddle

+0

那些誰投票請解釋,以便其他人可以學習:( – SajithNair

+0

@SajithNair因爲ID必須是唯一的,無論如何不應該重複...有人只是想請確保不違反 –

+0

@SajithNair我只是想給OP使用他目前sytesm一個選項...(我知道downvote來了) –

2

我會建議使用class而不是id。或者在生成動態ID時添加一些後綴。

6

我也明白,「ID」應該是唯一的,但是,隨着outest 不同的「身份證」,可以在解決問題幫助嗎?

號有非唯一元素的ID將無法正常工作。不一致,無論如何(不同的瀏覽器和框架可能會以不同的方式處理這種情況)。

任何專家在那裏可以給我一些好的建議?

不想使用class比使用id,特別是對於其可在頁面上多次重複使用的任何部件。

集ID對含有元素本身,而不是內部的構成要素,並相應地修改您的jQuery選擇。或者交替實現組件,使其在使用時需要'名稱空間'參數/屬性,並在組件內部命名空間前綴每個類名稱(此方法在創建定製JSP標記時特別有效)。

0

依賴於HTML版本:

  1. HTML 4 ID必須是文件範圍內唯一的。
  2. HTML 5容器樹中唯一的ID。

但我們建議是不是好的做法