我有一个javascript文件,可以创建一个上下文菜单。
function textCM()
{
$('.text').contextMenu('context-menu-1', {
'Context Menu Item 1 node level 1': {
click: function(element){ printId(element.attr('id')); },
},
'Context Menu Item 2 node level 1': {
click: function(element){ printId(element.attr('id')); },
},
});
}
我正在尝试使该函数动态创建上下文菜单(发送参数列表并将其添加到我的函数中)。 我所做的直到现在看起来像这样:
function textCM()
{
$('.' + arguments[0]).contextMenu('context-menu-1', {
arguments[1]: {
click: function(element) {
alert('Menu item 1 clicked' + element.attr('id'));
},
},
});
}
第一个函数按预期工作,但在第二个函数中我得到一个错误
SyntaxError:missing:属性id
之后
由行
引起arguments[1]: {
我知道还有其他问题有相同的错误,但据我所知,这不是同一个问题。我似乎无法理解我做错了什么。
答案 0 :(得分:1)
您无法在object literals中为名称使用变量。
您需要创建一个对象,然后使用bracket notation:
var menu = {};
menu[arguments[1]] = {
click: function(element) {
alert('Menu item 1 clicked' + element.attr('id'));
},
};
答案 1 :(得分:1)
键入
时var foo = 'oof';
var obj = {
foo: 'bar'
};
console.log(obj); //Object {foo: "bar"}
你不会得到{ oof: 'bar' }
,因为javascript定义了这样的对象键。因此,如果要使用DYNAMIC变量名称,则无法使用“快速”方式创建对象。你可以做的是:
var foo = 'oof';
var obj = {}; //First create an empty opject
obj[foo] = 'bar'; //Then assign the key by using brackets - this will expand foo
console.log(obj); //Object {oof: "bar"}
答案 2 :(得分:0)
您不能拥有这样的动态键,您需要使用括号表示法构建对象。
function textCM() {
var obj = {};
obj[arguments[1]] = {
click: function (element) {
alert('Menu item 1 clicked' + element.attr('id'));
}
};
$('.' + arguments[0]).contextMenu('context-menu-1', obj);
}