我在 jquery 中使用 tr:last 命令遇到了一个独特的错误。
我有一个基于模板行的.clone() 的动态表。
当我添加一行时,我想增加行数来命名字段
但是由于我也可以删除一行,因此增量因子需要查看最后一行的 id 以查看计数是否不是新行 var,而是 max+1。(实际上,由于克隆行,max+2)
我遇到的问题是它每隔一段时间都有效……这很奇怪。
这是添加 3 行的示例警报序列。
最大值 = 4 计数 = 5
最大值 = 4 计数 = 6
最大值 = 6 计数 = 7
因此,实际上永远不会找到 5 的最大值。
function addrow(table){
var className;
var count = $("#"+table+" tbody tr").length;
//since we have a th that server-side prints, no need to count++. if th removed, count++ this.
//in case of rows removed, need to find last row and check its number...
var max = $("#"+table+" tbody tr:last").attr('id').split("_").pop();
alert('max='+max+' count='+count);
if(parseInt(max)+2>count){
count = max;
}
var $clone = $("#"+table+" tbody tr:first").clone();
$clone.attr({
id: "dynrow_" +$('#'+table).attr("id")+"_"+ count.toString(),
"class": "" , //remove template class
style: "" // remove "display:none"
});
$clone.find("input,select,textarea").each(function(){
var xname = $(this).attr("name") + count.toString();
$(this).attr({
id: $(this).attr("id") + count.toString(),
name: xname
});
//populate fields that don't exist on page build by reading datacollector div with html5 data
$(this).val($("#datacollector").data(xname));
});
if(count%2==0){
className="even";
}
else{
className="odd";
}
$clone.find("td").each(function(){
if($(this).hasClass("xcol")){
className = className + ' xcol';
}
$(this).attr({
'class': className
});
});
$clone.find("label").each(function(){
$(this).attr({
"for": $(this).attr("for") + count.toString()
});
});
$clone.find("a.removerow").each(function(){
$(this).attr({
id: $(this).attr("id") + count.toString()
});
});
$("#"+table+" tbody").append($clone);
//update row counter
$("#initialrows_"+table).val(count.toString());
}
<input type="hidden" id="initialrows_table_aaa" name="initialrows_table_aaa" value="1">
<table id="table_aaa" class="dynrow">
<thead>
<tr>
<th>A</th>
<th>B</th>
<th>C</th>
</tr>
</thead>
<tbody>
<!--template-->
<tr class="template" id="template_aaa" style="display:none;">
<td class="even"><label for="inp_16">a</label><input type="text" name="a_" id="inp_16" value=""></td>
<td class="even"><label for="inp_17">b</label><select id="inp_17" name="b_">
<option value="">Select</option>
<option value="A">A</option>
</select>
</td>
<td class="even"><label for="inp_18">c</label><select id="inp_18" name="c_">
<option value="">Select</option>
<option value="A">A</option>
</select>
</td>
</tr>
<!--end template-->
</tbody>
工作小提琴, http://jsfiddle.net/briansol/5h4cM/1/
有任何想法吗?