Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/426.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 无法显示关联菜单_Javascript_Jquery_Html_Ajax_Contextmenu - Fatal编程技术网

Javascript 无法显示关联菜单

Javascript 无法显示关联菜单,javascript,jquery,html,ajax,contextmenu,Javascript,Jquery,Html,Ajax,Contextmenu,我的桌子是:: <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" oncon

我的桌子是::

<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>

测验
在表的单元格中(classname=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;

    } 
函数GetTemplateDetails(self,CustomerID)
{
var ConsolidatedInvoiceDispatchID=$(self.attr('data-ConsolidatedInvoiceDispatchID');
var CurrentRowID=$(self).closest('tr').attr(“数据uid”);
//发布AJAX以获取模板详细信息
$.ajax({
键入:“POST”,
url:rootUrl(“Dispatch/GetConsolidatedInvoiceDispatchDocuments”),
数据:{ConsolidatedInvoiceDispatchID:ConsolidatedInvoiceDispatchID,CustomerID:CustomerID},
成功:功能(数据){
var dataObjectForItems=[];
对于(变量i=0;i.CIDNoInvoiceNo”,
回调:函数(键、选项){
var m=“单击:”+选项。项[键]。名称;
window.console&&console.log(m)| | alert(m);
},
items:dataObjectForItems
});
}
});
返回false;
} 
使用此选项,我可以从服务器端获取上下文,但无法在右键单击中显示数据。

根据,它希望将对象作为items属性传递。您当前正在传递一个数组,试图在该数组上创建字符串键。。。数组在JavaScript中不应该以这种方式使用,它们应该只保留给数字索引,如果你想学究式地进行优化,线性索引从零开始。如果希望使用字符串键,则应切换到使用对象

因此,与其使用:

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

但是,如果切换到使用对象,则添加的每个键都将被视为(或转换为)字符串。这似乎是jQueryContentMenu所期望的;因此,每个菜单项都有一个命名标识符,这是代码设置字符串键所需的


但是等一下。。。 如果键被添加为属性,那么肯定与对象相同吗

如果jQuery contextMenu使用
for i in
循环来导航项目,那么是的,使用数组或对象不会有任何区别(只要数组本身没有实际元素)。不过,依赖这种可能性不是一个好主意,因为您实际上是在滥用数组。然而,在本例中并不是这样,因为我们讨论的是一个jQuery插件——显然,该插件正在使用第937行的
jQuery.each

// create contextMenu items
$.each(opt.items, function(key, item){

这将检测到
opt.items
是一个数组,并对其进行相应的处理,这意味着它将只遍历数组元素,而不遍历属性;对于您的数组
dataObjectForItems
而言,这意味着无需单步执行。

console中是否有任何错误?您的
选择器是否选择了它应该选择的内容?否没有error@IlyaLuzyanin选择器正确地选择它。返回的数据对象是什么样的结构?循环的
for
按摩数据的地方看起来有点古怪。。。具体来说,这一部分
dataObjectForItems[“data”+i]
您缺少第二行的
data-uid
属性。看看这个@Ratatouille~是的,这会有什么变化?回答您问题的两个用户都在使用对象,而不是数组,这是您应该做的。