我正在使用DataTables來列出行。最近,我在數據表上實現了ContextMenu插件,以便用戶右鍵單擊任意行並選擇上下文選項,如編輯行,刪除行等等。調用ContextMenu後,綁定到數據表TD的單擊事件不起作用
以下是用於在數據表執行文本菜單代碼:
$('#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中的向下鑽取功能給出的Drill-down rows解釋說,這工作得非常好,沒有任何毛刺。以下是代碼:
$('#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事件根本不會觸發。
已經嘗試過在DataTable論壇以及谷歌搜索,但沒有什麼幫助。當然,我錯過了一些東西。請求你幫助我,因爲我已經花了4天以上,但仍然沒有成功。謝謝大家。
我甚至試圖在行中的所有TD上創建contextmenu,除了每行的第一個TD,懷疑contextmenu插件可能與TD單擊事件衝突但沒有成功。 已更改... $(nRow).contextMenu ... to ... $('td:not(:eq(0))',nRow).contextMenu ...在fnRowCallback API中。 – Shant 2012-07-22 16:04:05
經過大量調試後,我發現問題不在於DataTable,而在於contextMenu。現在,由於時間不夠,我改變了contextmenu插件,現在我正在使用另一個上下文菜單插件... http://medialize.github.com/jQuery-contextMenu ...它建立在相同的插件,但幾乎沒有增強。 – Shant 2012-07-24 07:32:47