Передача значений из песочницы Greasemonkey в анонимные функции - PullRequest
1 голос
/ 15 апреля 2011


Это мой первый вопрос, наверное, очень глупый:)

У меня есть выборка значений в массиве, возвращаемых из GM_listValues ​​().
Когда я перебираю коллекцию, я хочу динамически создавать кнопки, которые вызывают функцию для удаления сохраненного значения и перезагрузки страницы.

deleteB.addEventListener("click", function() {deleteTrip(names[i]);pageSelect();}, false);

Над строкой, которую я использую, чтобы прикрепить событие к кнопке (deleteB). Однако, когда я нажимаю кнопку, javascript пытается получить доступ к массиву listValues ​​(names) с помощью переменной count (i). Естественно, этого не будет, поскольку цикл завершен, и names в любом случае не является глобальным.

Я хочу знать, есть ли способ скопировать строковое значение names[i] во время создания функции в кнопке, чтобы не нуждаться в ссылке на names[i] в коде.

Я знаю, что это, вероятно, очень простой ответ, но меня это озадачило, это одна из моих первых работ с javascript.

Заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 15 апреля 2011

Используйте закрытие, чтобы запомнить значение;

function createDeleteFunc(name) {
  return function(){deleteTrip(name);pageSelect();}
}

for() {
...
deleteB.addEventListener("click", createDeleteFunc(names[i]), false);
...
}
0 голосов
/ 16 апреля 2011

Проблема в том, что все создаваемые вами функции ссылаются на одну и ту же переменную i.При вызове они пытаются удалить names[i], но i теперь равно names.length, поэтому оно не работает.

Решение состоит в том, чтобы сделать отдельную ссылку на names[i] длякаждая функция.Обычно это делается с закрытием (а-ля Павел ответ)

...