簡體   English   中英

無法顯示上下文菜單

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM