我正在使用jQuery使用以下脚本克隆表体:
//1. Add new row
$("#addNew").click(function(e) {
e.preventDefault();
var $tableBody = $("#dataTable");
var $trLast = $tableBody.find("tr:last");
var $trNew = $trLast.clone();
var suffix = $trNew.find(':input:first').attr('name').match(/\d+/);
$trNew.find("td:last").html('<a href="#" class="remove">Remove</a>');
$.each($trNew.find(':input'), function(i, val) {
// Replaced Name
var oldN = $(this).attr('name');
var newN = oldN.replace('[' + suffix + ']', '[' + (parseInt(suffix) + 1) + ']');
$(this).attr('name', newN);
//Replaced value
var type = $(this).attr('type');
if (type.toLowerCase() == "text") {
$(this).attr('value', '');
}
});
$trLast.after($trNew);
});
// 2. Remove
$('a.remove').live("click", function(e) {
e.preventDefault();
$(this).parent().parent().remove();
});
我正在尝试克隆以下内容:
<tr style="border:1px solid black">
<td>@Html.TextBoxFor(a => a[j].WarmUp)</td>
<td>@Html.TextBoxFor(a => a[j].ExerciseName)</td>
<td>@Html.TextBoxFor(a => a[j].CoolDown)</td>
<td>@Html.TextBoxFor(a => a[j].MomentOfTheDay)</td>
<td>@Html.TextBoxFor(a => a[j].ExerciseWeek)</td>
<td><select asp-items="Html.GetEnumSelectList<SampleMvcApp.Models.Days>()"></select></td>
<td>
@if (j > 0)
{
<a href="#" class="remove">Remove</a>
}
</td>
但是,如果HTML.TextBox
标记中只包含所有<td>
或任何其他文字,但我添加
<select asp-items="Html.GetEnumSelectList<SampleMvcApp.Models.Days>()"></select>`
它停止工作。
在
处获取错误var newN = oldN.replace('[' + suffix + ']', '[' + (parseInt(suffix) + 1) + ']');
有什么建议吗?
答案 0 :(得分:2)
您的<select>
标记(包含在jQuery的:input
选择器中)没有name
属性,因此该标记的$(this).attr('name')
将是未定义的。
因此oldN
也将是未定义的,因此错误。
在name
代码中添加<select>
属性,或搜索实际的<input>
代码,而不是:input
,以限制自己使用文字框:
$.each($trNew.find('input:text'), function (i, val) {