SyntaxError:缺少:

时间:2013-12-19 13:20:24

标签: javascript jquery

我有一个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]: {

我知道还有其他问题有相同的错误,但据我所知,这不是同一个问题。我似乎无法理解我做错了什么。

3 个答案:

答案 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);
}