Ошибка синтаксиса: отсутствует:

0

У меня есть файл 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]: {

Я знаю, что есть другие вопросы с одинаковой ошибкой, но, насколько я могу судить, это не та же проблема. Я просто не могу понять, что я делаю неправильно.

  • 5
    Прекратите ставить запятые после последнего свойства литерала объекта, IE не понравится. Я не уверен, является ли это причиной вашей проблемы или нет.
  • 0
    спасибо, но это не помогло. И я использую Firefox
Теги:

3 ответа

1
Лучший ответ

Вы не можете использовать переменную для имен в объектных литералах.

Вам нужно создать объект и использовать скобку:

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню