1

我正在使用DataTables列出行。最近,我在数据表上实现了ContextMenu插件,使用户能够右键单击任何行并选择上下文选项,例如编辑行、删除行等等。

以下是用于在 DataTable 上实现 ContextMenu 的代码:

$('#dtPOL').dataTable({
  "fnRowCallback": function (nRow, aData, iDisplayIndex, iDisplayIndexFull) {
    $(nRow).contextMenu({
        menu: 'cntxtmnuDataTable'
    },
    function (action, el, pos) {
        if (action != '') {
            alert('You selected: ' + action);
        }
        return true;
    });
  }
});

除此之外,我还在 DataTable 上实现了向下钻取功能,如向下钻取行中给出和解释的那样,它运行良好,没有任何故障。以下是代码:

$('#dtPOL tbody td').live('click', function () {
    var nTr = this.parentNode;
    var i = $.inArray(nTr, anOpen);

    if (i === -1) {
        $('img', this).attr('src', gImageURL + "b-qv-hide.png");
        var nDetailsRow = oTable.fnOpen(nTr, fnQuickView(oTable, nTr), 'quickView');
        $('div.innerDetails', nDetailsRow).slideDown();
        anOpen.push(nTr);
    }
    else {
        $('img', this).attr('src', gImageURL + "b-qv-show.png");
        $('div.innerDetails', $(nTr).next()[0]).slideUp(function () {
            oTable.fnClose(nTr);
            anOpen.splice(i, 1);
        });
    }
});

上述代码段中调用的函数如下:

function fnQuickView(oTable, nTr) {
    var aData = oTable.fnGetData(nTr);
    var sOut = '<div class="innerDetails">';
    sOut += '<table cellpadding="5" cellspacing="0" border="0">';
    sOut += '<tr><td>Detailed Description:</td><td>:</td><td>' + aData[2] + '</td></tr>';
    sOut += '</table>';
    sOut += '</div>';

    return sOut;
}

现在,一旦我调用 ContextMenu,问题就开始了。正如我所做的那样,向下钻取功能停止工作。在调试时,我发现 TD.control 上的 click 事件在调用 ContextMenu 后根本没有触发。

曾尝试在 DataTable 论坛和 Google 上进行搜索,但没有任何帮助。我敢肯定,我错过了一些东西。请您帮助我,因为我已经花了 4 多天了,但仍然没有成功。谢谢大家。

4

1 回答 1

1

问题确实出在 contextMenu 插件上……它取消了网页所有元素上的所有 .click 事件……所以只需注释掉 .js 文件的所有语句,这些语句会取消绑定文档上的 .click 事件……这个技巧适用于我...

于 2013-01-10T16:59:29.847 回答