我正在使用jquery数据表。我尝试检索行数据时遇到Cannot create property 'guid' on string
错误。
var employersTable = $('#employersTable').DataTable();
$('#add').click(function() {
addRow($('.username').val(), $('.phone').val());
});
$('body').on('click', '#employersTable tr', retrieveRow(this));
function addRow(username, phone) {
employersTable.row.add([
'<td>' + username + '</td>',
'<td>' + phone + '</td>',
]).draw();
}
function retrieveRow(e) {
alert('fire')
tr = e.target;
row = employersTable.row(tr);
detail_data = row.data();
$("#result").empty().html(detail_data[0] + " " + detail_data[1])
}
另一个奇怪的事情是我的函数retrieveRow在init上启动,为什么?我把这个函数放在一个点击事件中。
答案 0 :(得分:8)
你的主要问题是这一行:
$('body').on('click', '#employersTable tr', retrieveRow(this));
^^^^^^^^^^^^^^^^^
这实际上立即执行 retrieveRow()
。当您在on()
事件处理程序中引用函数变量时,引用它作为变量:
$('body').on('click', '#employersTable tr', retrieveRow);
retrieveRow()
:
tr = e.target;
e.target
不一定是<tr>
,很可能是您点击的<td>
。事件处理程序定位#employersTable tr
,因此this
包含对<tr>
的引用:
tr = $(this)
是正确的,更安全的是
tr = $(e.target).closest('tr')
分叉小提琴 - &gt;的 http://jsfiddle.net/nkaq816f/ 强>