2013-12-19 41 views
0

我有一个JavaScript文件,它创建一个上下文菜单。SyntaxError:missing:

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 : after property id

由线路引起的

arguments[1]: { 

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

+5

停止在对象文字的最后一个属性后面逗号,IE不喜欢它。我不确定这是否是您问题的原因。 –

+0

谢谢,但没有帮助。我正在使用Firefox – tharyse

回答

1

您不能在object literals中使用名称变量。

你需要创建一个对象,并使用bracket notation

var menu = {}; 
menu[arguments[1]] = { 
     click: function(element) { 
      alert('Menu item 1 clicked' + element.attr('id')); 
      }, 
     }; 
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); 
} 
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"} 
相关问题