2011-11-01 90 views
0

用戶輸入值對。我需要複製最後一組並重新編號它們的ID。下面的函數運行,但新的div沒有出現。我在雜草叢生的地方......謝謝你的幫助!克隆()不起作用(對我而言)

$('#addparm').click(function (event) { 
     event.preventDefault(); 
     var maxSeq = $('#maxseq').attr("seq"); 
     var lastDiv = $('#pct[' + maxSeq + ']').parent(); 
     $('#maxseq').attr("seq", ++maxSeq); 
     var newDiv = $(lastDiv).clone(true); 
     $(lastDiv).after(newDiv); 
     $(newDiv).fadeIn('slow'); 
    }); 

這裏的HTML:

... 
    <div id="bkp[8]"> 
     <input seq="8" id="pct[8]" name="pct" type="text" value="0.28" /> 
     <input seq="8" id="amt[8]" name="amt" type="text" value="43.2" /> 
     <input seq="8" id="use[8]" name="use" type="hidden" value="yes" /> 
    </div> 

    <div id="bkp[9]"> 
     <input seq="9" id="pct[9]" name="pct" type="text" value="0.31" /> 
     <input seq="9" id="amt[9]" name="amt" type="text" value="41.4" /> 
     <input seq="9" id="use[9]" name="use" type="hidden" value="yes" /> 
    </div> 
<input type="hidden" id="maxseq" seq="9" /> 
<a id="addparm" href="javascript:void(0)">Add</a> 

回答

3

克隆工作正常,但你的選擇是沒有找到在其上運行任何東西。

根據HTML specs,您不能在元素的ID中使用方括號。此外,查找ID爲方括號的元素的選擇器與您認爲的元素不匹配。

的選擇:

#foo[5] 

不元素與ID foo[5]匹配,而是尋找一個element with ID fooattribute named 5

這意味着lastDiv持有一個空的jQuery集合,所以沒有任何東西被克隆,也沒有東西被附加。

解決方案是在保持不正確的ID attr值(不推薦)時修改選擇器中的方括號,或修改ID值以符合規範並將代碼調整爲新的ID格式。

+0

這是真的。證明:http://jsfiddle.net/C2R8D/我改變了有問題的元素的id,以刪除方括號,並在jQuery選擇器中做了相同的更改。 – weir

+0

這裏證明你**可以**保留你的ID。只需在jQuery選擇器中用兩個反斜槓轉義方括號即可.http://jsfiddle.net/8REPj/但是,@JAAulde是正確的,HTML4規範說這不是合法ID,所以可能建議更改ID格式。 – weir

+1

是的,藉助逃脫選擇器,您可以在選擇器中使用某些項目,這些項目最好不要混在一起。 IMO最好調整語法和方法。 – JAAulde