У меня есть файл 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: после идентификатора свойства
что вызвано линией
arguments[1]: {
Я знаю, что есть другие вопросы с одинаковой ошибкой, но, насколько я могу судить, это не та же проблема. Я просто не могу понять, что я делаю неправильно.
Вы не можете использовать переменную для имен в объектных литералах.
Вам нужно создать объект и использовать скобку:
var menu = {};
menu[arguments[1]] = {
click: function(element) {
alert('Menu item 1 clicked' + element.attr('id'));
},
};
Когда вы вводите
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"}
У вас не может быть таких динамических клавиш, вам нужно создать объект с помощью скобок.
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);
}