【发布时间】:2016-02-13 11:30:56
【问题描述】:
我有标准的 DataTable 代码,它填充数据表并在行点击时显示子行。
在子行内(使用格式功能)我添加了一个按钮,我想在点击它时做一些事情,但每次我点击按钮(数据表包含新的 tr->td 内的子行)td 点击事件用于打开/关闭子行的函数被触发,我得到 "Uncaught TypeError: Cannot read property '0' of undefined" 格式函数中的 d[] 数组。
这是子行打开/关闭的代码:
$('tbody').on('click', 'td', function() {
var tr = $(this).closest('tr');
id = $(this).closest('table').attr('id');
table = $('#' + id).DataTable();
var row = table.row(tr);
if (row.child.isShown()) {
// This row is already open - close it
row.child.hide();
tr.removeClass('shown');
} else {
// Open this row
row.child(format(row.data(), id)).show();
tr.addClass('shown');
}
});
function format(d, id) {
// `d` is the original data object for the row
if(sessionStorage['name']!=undefined)
return '<img src="images/photo.jpg" id="photo" />' + '<p>Session created by:' + d[0] + '</p>' + '<p>Start Date:' + d.start_date + '</p>' + '<p>Extra info:' + d[3] + '</p>' + "<button class='btn btn-default' id='joinbutton' role='button'>Join Session</button>";
else
return '<div>' + '<img src="images/photo.jpg" id="photo" />' + '<p>Session created by:' + d[0] + '</p>' + '<p>Start Date:' + d.start_date + '</p>' + '<p>Extra info:' + d[3] + '</p>' + '</div>';
}
有没有办法防止 td click 事件被触发子行或以某种方式检测按钮单击?
谢谢
【问题讨论】:
-
你可以将事件添加到你的函数 $('tbody').on('click', 'td', function(e) { 这样你就可以测试 e.target 元素,如果这不是正确的,您可能会停止您的功能,或者您可能会处理事件 stoppropagation
-
太复杂了,无法在同一个函数中创建两个函数,所以我将表格的按钮提取到一个 td 中。感谢您的帮助,我稍后可能会回复您的答案
-
您能否提供完整的示例,例如使用 JSFiddle,这将更容易理解确切的问题。同时你可以尝试添加 event.stopPropagation();内部按钮点击事件。
标签: javascript jquery datatables