在 MVC4 上向 DOM table 添加行
Issue adding rows to DOM table on MVC4
我在 MVC 4 中有一个 "DOM" 列表,使用 jQuery 动态添加元素,但在删除所有元素时
table 不再允许我添加更多元素,我尝试使用长度和比较但它不起作用。
我可能遗漏了一些明显的东西,但看不到它是什么。有什么想法吗?
示例
这是我的table代码
<div><a href="#" id="addNew"><img src="~/Images/splus.png" alt="Add Product" style="border:0"/></a></div>
<table id="dataTable" border="0" cellpadding="0" cellspacing="0">
<thead>
<tr>
<th></th>
<th></th>
<th>Product</th>
<th>Quantity</th>
<th></th>
</tr>
</thead>
<tbody>
@if (Model != null && Model.Count > 0)
{
int j = 0;
int index = 1;
foreach (var i in Model)
{
<tr>
<td>@index</td>
<td>@Html.HiddenFor(a => a[j].SEQ_NO, new { id = "nrow", Value = index })</td>
<td>@Html.DropDownList("PRODUCTS", "Select Product")</td>
<td>@Html.TextBoxFor(a => a[j].QUANTITY)</td>
<td>
<a href="#" id="remove" class="remove"><img src="~/Images/sminus.png" alt="Add Product" style="border:0"/></a>
</td>
</tr>
index += 1;
j++;
}
}
</tbody>
</table>
这是我的jQuery代码,当我点击添加新
$("#addNew").click(function (e) {
e.preventDefault();
var last = $('#dataTable>tbody>tr:last');
if (last.length > 0) {
var name = last.children().find('input,select')[0].name;
var index = Number(name.replace(/[^0-9]/gi, '')) + 1;
var tr = ('<tr>' + last.html().replace(/[0-9]+__/gi, index + '__') + '</tr>').replace(/\[[0-9]+\]+[.]/gi, '[' + index + '].');
numberRows($('#dataTable tbody').append(tr));
}
});
更新:
添加"REMOVE CODE"
$(document).on('click', '#remove', function (e) {
e.preventDefault();
$(this).parent().parent().remove();
numberRows($('#dataTable tbody'));
});
Am probably missing something obvious but can't see what it is. Any ideas?
var name = last.children().find('input,select')[0].name;
这行代码需要最后一个child,这意味着在您删除最后一个 under 之后,name
将是未定义的。事实上,Add New 函数甚至不会传递 if (last.length > 0)
,因为当最后一个被移除时,last.length
变为 0。
你可以在devtools中调试,会看到:
在删除最后一个之前:
在删除最后一个之后:
因此,要解决此问题,最简单的解决方案是不删除最后一个,而是将其隐藏。请检查以下代码:
$(document).on('click', '#remove', function (e) {
e.preventDefault();
if ($('#dataTable>tbody>tr').length > 1) {
$(this).parent().parent().remove();
//numberRows($('#dataTable tbody'));
}
else {
$(this).parent().parent().hide();
}
});
Ps。不确定 numberRows() 函数中发生了什么,所以我对其进行了评论。
我在 MVC 4 中有一个 "DOM" 列表,使用 jQuery 动态添加元素,但在删除所有元素时 table 不再允许我添加更多元素,我尝试使用长度和比较但它不起作用。
我可能遗漏了一些明显的东西,但看不到它是什么。有什么想法吗?
示例
这是我的table代码
<div><a href="#" id="addNew"><img src="~/Images/splus.png" alt="Add Product" style="border:0"/></a></div>
<table id="dataTable" border="0" cellpadding="0" cellspacing="0">
<thead>
<tr>
<th></th>
<th></th>
<th>Product</th>
<th>Quantity</th>
<th></th>
</tr>
</thead>
<tbody>
@if (Model != null && Model.Count > 0)
{
int j = 0;
int index = 1;
foreach (var i in Model)
{
<tr>
<td>@index</td>
<td>@Html.HiddenFor(a => a[j].SEQ_NO, new { id = "nrow", Value = index })</td>
<td>@Html.DropDownList("PRODUCTS", "Select Product")</td>
<td>@Html.TextBoxFor(a => a[j].QUANTITY)</td>
<td>
<a href="#" id="remove" class="remove"><img src="~/Images/sminus.png" alt="Add Product" style="border:0"/></a>
</td>
</tr>
index += 1;
j++;
}
}
</tbody>
</table>
这是我的jQuery代码,当我点击添加新
$("#addNew").click(function (e) {
e.preventDefault();
var last = $('#dataTable>tbody>tr:last');
if (last.length > 0) {
var name = last.children().find('input,select')[0].name;
var index = Number(name.replace(/[^0-9]/gi, '')) + 1;
var tr = ('<tr>' + last.html().replace(/[0-9]+__/gi, index + '__') + '</tr>').replace(/\[[0-9]+\]+[.]/gi, '[' + index + '].');
numberRows($('#dataTable tbody').append(tr));
}
});
更新:
添加"REMOVE CODE"
$(document).on('click', '#remove', function (e) {
e.preventDefault();
$(this).parent().parent().remove();
numberRows($('#dataTable tbody'));
});
Am probably missing something obvious but can't see what it is. Any ideas?
var name = last.children().find('input,select')[0].name;
这行代码需要最后一个child,这意味着在您删除最后一个 under 之后,name
将是未定义的。事实上,Add New 函数甚至不会传递 if (last.length > 0)
,因为当最后一个被移除时,last.length
变为 0。
你可以在devtools中调试,会看到:
在删除最后一个之前:
在删除最后一个之后:
因此,要解决此问题,最简单的解决方案是不删除最后一个,而是将其隐藏。请检查以下代码:
$(document).on('click', '#remove', function (e) {
e.preventDefault();
if ($('#dataTable>tbody>tr').length > 1) {
$(this).parent().parent().remove();
//numberRows($('#dataTable tbody'));
}
else {
$(this).parent().parent().hide();
}
});
Ps。不确定 numberRows() 函数中发生了什么,所以我对其进行了评论。