我正在研究这段代码。我希望为每一行启用删除和添加行。对于添加行按钮,我希望在所选行的正下方添加行...有谁知道如何做到这一点? 感谢是否有人可以提供帮助。
<html>
<head>
<script src= 'http://code.jquery.com/jquery-2.1.1.min.js'></script>
<script>
$(document).ready(function () {
var counter = 0;
$("#addrow").on("click", function () {
var counter = $('#myTable tr').length - 2;
$("#ibtnDel").on("click", function () {
counter = -1
});
var newRow = $("<tr>");
var cols = "";
cols += '<td><input type="text" name="name' + counter + '"/></td>';
cols += '<td><input type="text" name="price' + counter + '"/></td>';
cols += '<td><input type="button" id="ibtnDel" value="Delete"></td>';
cols += '<td colspan="5" style="text-align: left;"><input type="button" id="addrow" value="Add Row" /></td>';
newRow.append(cols);
$("table.order-list").append(newRow);
counter++;
});
$("table.order-list").on("change", 'input[name^="price"]', function (event) {
calculateRow($(this).closest("tr"));
calculateGrandTotal();
});
$("table.order-list").on("click", "#ibtnDel", function (event) {
$(this).closest("tr").remove();
calculateGrandTotal();
});
});
function calculateRow(row) {
var price = +row.find('input[name^="price"]').val();
}
function calculateGrandTotal() {
var grandTotal = 0;
$("table.order-list").find('input[name^="price"]').each(function () {
grandTotal += +$(this).val();
});
$("#grandtotal").text(grandTotal.toFixed(2));
}
</script>
</head>
<body>
<table id="myTable" class="order-list">
<thead>
<tr>
<td>Name</td>
<td>Price</td>
</tr>
</thead>
<tbody>
<tr>
<td>
<input type="text" name="name" />
</td>
<td>
<input type="text" name="price1" />
</td>
<td><input type="button" id="ibtnDel" value="Delete"></td>
<td colspan="5" style="text-align: left;">
<input type="button" id="addrow" value="Add Row" />
</td>
</tr>
</tbody>
<tfoot>
<tr>
<td colspan="">Grand Total: $<span id="grandtotal"></span>
</td>
</tr>
</tfoot>
</table>
</body>
</html>
答案 0 :(得分:1)
演示的可视化:
我在所有其他答案中看到count
功能完全被忽略,因此在他们发布的演示中不再有效。因此,永远不会禁用add
按钮。
我已经解决了这个问题,确保代码在任何地方都是连贯的。从我的演示中可以看出,当count变量等于4时,所有add
按钮都被禁用。此外,当count计数函数再次低于4时,所有按钮都会再次启用。这可能正是你想要的。
要使选择性添加功能需要做的是添加另一个功能,该功能负责在单击相应按钮的行之后添加行。
举个例子:
$("#addrow").on("click", function () {
counter = $('#myTable tr').length - 2;
var newRow = $("<tr>");
var cols = "";
cols += '<td><input type="text" name="name' + counter + '"/></td>';
cols += '<td><input type="text" name="price' + counter + '"/></td>';
cols += '<td><input type="button" class="ibtnAdd" value="Add after"></td>';
cols += '<td><input type="button" class="ibtnDel" value="Delete"></td>';
newRow.append(cols);
$("table.order-list").append(newRow);
if (counter >= 4) {
$('#addrow').attr('disabled', true).prop('value', "You've reached the limit");
$('.ibtnAdd').attr('disabled', true).prop('value', "You've reached the limit");
}
counter++;
});
// ...
// ... here is the other jQuery code
// ...
$("table.order-list").on("click", ".ibtnDel", function (event) {
$(this).closest("tr").remove();
calculateGrandTotal();
counter--;
$('#addrow').attr('disabled', false).prop('value', "Add Row");
$('.ibtnAdd').attr('disabled', false).prop('value', "Add after");
});
$("table.order-list").on("click", ".ibtnAdd", function (event) {
counter = $('#myTable tr').length - 2;
var newRow = $("<tr>");
var cols = "";
cols += '<td><input type="text" name="name' + counter + '"/></td>';
cols += '<td><input type="text" name="price' + counter + '"/></td>';
cols += '<td><input type="button" class="ibtnAdd" value="Add after"></td>';
cols += '<td><input type="button" class="ibtnDel" value="Delete"></td>';
newRow.append(cols);
$(this).closest("tr").after(newRow);
if (counter >= 4) {
$('#addrow').attr('disabled', true).prop('value', "You've reached the limit");
$('.ibtnAdd').attr('disabled', true).prop('value', "You've reached the limit");
}
counter++;
});
此外,建议使用.after()
代替.append()
。
答案 1 :(得分:0)
您正在尝试创建ids
并在html DOM
中插入相似的内容并尝试在ids
上添加点击事件,这实际上是一种不好的做法,违反HTML规则!所以我通过聆听class
并将class
添加到每个按钮来改变您的点击事件,下面将是您的更改:
<强> DEMO HERE 强>
$("#myTable").on("click",".addRow", function () {
var counter = $('#myTable tr').length - 2;
var newRow = $("<tr>");
var cols = "";
cols += '<td><input type="text" name="name' + counter + '"/></td>';
cols += '<td><input type="text" name="price' + counter + '"/></td>';
cols += '<td><input type="button" id="ibtnDel" class="dele" value="Delete"></td>';
cols += '<td colspan="5" style="text-align: left;"><input type="button" class="addRow" value="Add Row" /></td>';
newRow.append(cols);
newRow.insertAfter($(this).parents().closest('tr'));
counter++;
});
$("#myTable").on("click",".dele", function () {
counter = -1
});
删除功能将是:
$("table.order-list").on("click", ".dele", function (event) {
$(this).closest("tr").remove();
calculateGrandTotal();
});
使用.insertAfter
在点击的行之后插入。
答案 2 :(得分:0)
<强>的jsfiddle 强> http://jsfiddle.net/gax0w07p/
使用.after()
代替append
:
//Replace
//$("table.order-list").append(newRow);
// With
$(this).parent().parent().after(newRow);
// this = button
// first parent = td
// second parent = tr
另一种选择是使用最近而不是两次父呼叫
$(this).closest('tr').after(newRow);
关于after()
的文档: http://api.jquery.com/insertafter/