从绑定元素的子节点中删除事件处理程序

时间:2012-02-15 15:10:47

标签: jquery html-table

我有点击处理程序,我想应用于表格中的行:

var myTable = $(this);
myTable.on('expand', 'tr', myHandler);
myTable.on('click', 'tr', function () {
    $(this).trigger('expand');
});

function myHandler(e) {
    // my action
}

这是一个非常简化的版本,但它会触发一个扩展行的jQuery方法。我想根据其内容从特定行中删除此处理程序。我有一个函数,每次单击行时都会触发。如果它与设置条件不匹配,则会触发一个方法,显示一条消息,通知用户该问题。我现在要禁用单击以展开此行。

function stopFunction(row) {
    row.find('th[scope=row]').parents("#tableID").off('expand', 'tr', myHandler);
}

上面只是删除了所有行的点击以扩展功能。我不知道如何允许单击其他行,只是从这个单表行中删除处理程序。请注意,row.find('th[scope]')是行的表格单元格,其第一个父元素是它的行,然后行的父元素是表格(@tableID)。

2 个答案:

答案 0 :(得分:2)

function stopFunction(row) {
    row.on("click", function (e) {
        e.stopPropagation();
    });
}

Proof of concept.

答案 1 :(得分:1)

如您所知,您的.off来电将关闭整个事件处理程序。这是因为,使用on(这是一个很好的做法),你只有一个事件处理程序,它响应所有匹配的元素(在你的情况下为tr)。

我建议您使用类来代替。将类no-expand添加到那些不应展开的tr,并改为使用此事件处理程序:

myTable.on('click', 'tr:not(".no-expand")', function() { ... })

function stopFunction(row) {
  row.addClass("no-expand");
}