【发布时间】:2021-03-02 21:55:38
【问题描述】:
当我在编辑模式中编辑某些字段时,我正在尝试更新我的datatable。下面是我的modal、add row 和btnSubmit 函数,用于获取已编辑的字段。
<div class="modal" id="myModal">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
<h4 class="modal-title">Close</h4>
</div>
<div class="modal-body">
<p>
<label for="name">Name:</label>
<input type="text" id="name1" placeholder="Name">
</p>
<p>
<label for="name">E-mail#:</label>
<input type="email" class="input-sm" id="email1" placeholder="Email">
</p>
<p>
<label for="name">Contact#:</label>
<input type="text" class="input-sm" id="cno1" placeholder="Contact">
</p>
<p>
<label for="name">Date Of Birth:</label>
<input type="date" class="input-sm" id="dob1" placeholder="DOB">
</p>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
<button type="button" id="btnsubmit" class="btn btn-primary">Save changes</button>
</div>
</div>
<!-- /.modal-content -->
</div>
<!-- /.modal-dialog -->
</div>
$('.add-row').on('click', function() {
name = $("#name").val();
email = $("#email").val();
cno = $("#cno").val();
bdy = $("#bday").val();
t.row.add([
name,
email,
cno,
bdy,
"<button class ='btn btn-danger del'>Delete</button>" + " " + "<button class='btn btn-warning upd'>Edit</button>"
]).draw(false);
$("#name").val('');
$("#email").val('');
$("#cno").val('');
$("#bday").val('');
});
$("#btnsubmit").click(function () {
var new_name = $("#name1").val();
var new_email = $("email1").val();
var new_cno = $("#cno1").val();
var new_dob = $("#dob1").val();
$("#myModal").modal("hide");
})
更新 1
我试着做一个数组然后画出来。
//save change button click evnet
$("#btnsubmit").click(function () {
var table = $('#example').DataTable();
var tableRow = $(this).parents('tr');
var new_name = $("#name1").val();
var new_email = $("email1").val();
var new_cno = $("#cno1").val();
var new_dob = $("#dob1").val();
var rData = [
new_name,
new_email,
new_cno,
new_dob,
];
table
.row(tableRow)
.data(rData)
.draw();
$("#myModal").modal("hide");
});
现在我遇到了错误
> datatable.js:430 Uncaught TypeError: Cannot set property '_aData' of undefined
at D.<anonymous> (datatable.js:430)
at D.data (datatable.js:371)
at HTMLButtonElement.<anonymous> (form1_datatable.html:194)
at HTMLButtonElement.dispatch (jquery.min.js:2)
at HTMLButtonElement.v.handle (jquery.min.js:2)
更新 2
所以在做了一些努力之后,我终于能够更新该行了。但现在我遇到了一个问题。每当我尝试更新它时,它总是更新第一行。下面是我保存按钮的代码
//save change button click evnet
$("#btnsubmit").on('click',function () {
var table = $('#example').DataTable();
var tableRow = $(this).closest('tr');
var new_name = $("#name1").val();
var new_email = $("#email1").val();
var new_cno = $("#cno1").val();
var new_dob = $("#dob1").val();
var rData = [
new_name,
new_email,
new_cno,
new_dob,
"<button class ='btn btn-danger del'>Delete</button>" + " " + "<button class='btn btn-warning upd'>Edit</button>"
];
console.log(tableRow);
table
.row()
.data(rData)
.draw();
$("#myModal").modal("hide");
});
更新 3
根据Vahap 的回答我更新了我的代码
$('.add-row').on('click', function() {
id = 0;
name = $('#name').val();
email = $('#email').val();
cno = $('#cno').val();
bdy = $('#bday').val();
t.row.add([
name,
email,
cno,
bdy,
'<button class ="btn btn-danger del">Delete</button>' + '' + '<button class="btn btn-warning upd" data-id="'+$('#example').DataTable().rows().count()+'">Edit</button>'
]).draw(false);
$("#name").val('');
$("#email").val('');
$("#cno").val('');
$("#bday").val('');
});
//save change button click evnet
$("#btnsubmit").on('click',function (e) {
// Prevent event propagation
e.stopPropagation();
var new_name = $("#name1").val();
var new_email = $("#email1").val();
var new_cno = $("#cno1").val();
var new_dob = $("#dob1").val();
const id = $(this).attr("data-id");
console.log(id);
var temp = $('#example').DataTable().row(id).data();
temp[0] = new_name;
temp[1] = new_email;
temp[2] = new_cno;
temp[3] = new_dob;
$('#example').DataTable().row(id).data( temp ).draw(false);
$("#myModal").modal("hide");
});
但它仍然总是更新第一行。我也得到了undefined const id = $(this).attr("data-id"); console.log(id);
我可以添加一个新行,删除它并打开一个模式来编辑它。现在我想问的是如何将更新的值设置到我当前的datatable 行中?任何帮助将不胜感激。
【问题讨论】:
-
btnSubmit 按钮是独立于表还是在每一行中?问题似乎是找到正确的行来更新值。
var tableRow = $(this).closest('tr');只给出最接近 btnSubmit 的值,并且总是首先,我们如何知道更新行的行? -
@GökhanAldanmaz 每一行都可以更新。所以我想我们可以解决使用行 ID 的问题?
标签: javascript html jquery datatables