2011-11-01 91 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