[英]Not able to show the context menu
我的桌子是:
<table>
<tbody role="rowgroup">
<tr class="k-alt" data-uid="969dc7e1-0267-46c5-b9ec-b576ba97efc8" role="row">
<td class="CIDNoInvoiceNo" data-consolidatedinvoicedispatchid="173" data-customerid="548" oncontextmenu="GetTemplateDetails(this,548);return false;" role="gridcell" id="DispatchManagement_active_cell">
Test
</td>
</tr>
</tbody>
</table>
我想在上下文的單元格上(類名稱為CIDNoInvoiceNo)使用菜單。
我曾嘗試過::
function GetTemplateDetails(self,CustomerID)
{
var ConsolidatedInvoiceDispatchID = $(self).attr('data-consolidatedinvoicedispatchid');
var CurrentRowID = $(self).closest('tr').attr("data-uid");
//POST AJAX to get Template Details
$.ajax({
type: 'POST',
url: rootUrl("Dispatch/GetConsolidatedInvoiceDispatchDocuments"),
data: { ConsolidatedInvoiceDispatchID: ConsolidatedInvoiceDispatchID, CustomerID: CustomerID },
success: function (data) {
var dataObjectForItems = [];
for (var i = 0; i < data.length; i++) {
dataObjectForItems["data" + i] = { name: data[i].Description };
}
$.contextMenu({
selector: "tr[data-uid="+ CurrentRowID +"]>.CIDNoInvoiceNo",
callback: function (key, options) {
var m = "clicked: " + options.items[key].name;
window.console && console.log(m) || alert(m);
},
items: dataObjectForItems
});
}
});
return false;
}
使用此方法,我從服務器端獲取了上下文,但無法右鍵單擊顯示數據。
根據jQuery contextMenu的文檔/ demo ,它希望將一個對象作為items屬性傳遞。 您當前正在傳遞一個數組,您正在嘗試在該數組上創建字符串鍵...在JavaScript中,數組不應該以這種方式使用,應該只為數字索引保留,如果您想學究線性索引應從零開始關於優化。 如果希望具有字符串鍵,則應改用Object。
所以不要使用:
var dataObjectForItems = [];
您應該使用:
var dataObjectForItems = {};
一個示例說明為什么不能將字符串鍵設置為數組:
var a = [];
a[0] = 1;
a[1] = 2;
a[2] = 3;
a['string'] = 4;
console.log(a);
上面的輸出將是:
[1, 2, 3]
您會發現'string'
已添加為屬性,而不是數組中的元素。 您可以通過記錄數組的長度來確認這一點,該長度仍然僅為3,而不是4。
但是,如果切換到使用對象,則添加的每個鍵都將被視為(或轉換為)字符串。 這似乎是jQuery contentMenu所期望的; 因此,每個菜單項都有一個命名的標識符,這也是您的代碼設置字符串鍵所需要的。
如果鍵是作為屬性添加的,那么肯定與對象相同嗎?
如果jQuery contextMenu使用for i in
循環瀏覽項目,則可以,使用數組或對象沒有區別(只要數組本身沒有實際元素)。 但是,依靠這種可能性並不是一個好主意,因為您實際上是在濫用陣列。 但是,這不是在這種情況下發生的事情,並且因為我們在談論jQuery插件-顯然,該插件正在使用jQuery.each
行上的jQuery.each
。
// create contextMenu items
$.each(opt.items, function(key, item){
這將檢測到opt.items
是一個數組,並對其進行相應的處理,這意味着它將僅遍歷數組元素,而不是屬性。 對於您的數組dataObjectForItems
意味着沒有任何步驟dataObjectForItems
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.