Javascript в плагине Chrome имеет синтаксическую ошибку - PullRequest
0 голосов
/ 05 июня 2010
chrome.tabs.executeScript(null, {code:"$.each(selectValues, function(key='" + timestamp + "', value='Custom')
{   
     $('#expire').
          append($(\"<option></option>\").
          attr(\"value\",key).
          text(value)); 
});"});

В нем говорится, что в первой строке есть синтаксическая ошибка, а инспектор WebKit показывает странные шаблоны выделения.

Что с этим не так? Друг думает, что мне нужно куда-нибудь убежать от некоторых персонажей.

Спасибо за помощь!

Ответы [ 2 ]

2 голосов
/ 05 июня 2010

Это определенно недопустимый синтаксис. У вас есть знак равенства в списке формальных параметров.

Предположительно, это закончится как:

$.each(selectValues, function(key='someTime', value='Custom')
{   
     $('#expire').
          append($(\"<option></option>\").
          attr(\"value\",key).
          text(value)); 
});

Я рекомендую вам использовать опцию file, если это возможно, чтобы вам не приходилось иметь дело с экранирующими проблемами:

chrome.tabs.executeScript(null, {file: "myScript.js"});

Предположительно код в myScript.js будет выглядеть примерно так:

$.each(selectValues, function(key, value)
{   
     $('#expire').
          append($("<option></option>").
          attr("value",key).
          text(value)); 
});

Однако не ясно, что вы пытаетесь сделать. jQuery.each принимает обратный вызов с двумя параметрами, но что вы ожидаете от значений справа от знака равенства?

1 голос
/ 05 июня 2010

Вы не можете использовать каждый таким образом. $.each() ожидает функцию в качестве обратного вызова, которая ожидает два параметра: index и value.

jQuery.each( collection, callback(indexInArray, valueOfElement) )

Вы не можете передать свои собственные данные в определение функции .

Это относится не к jQuery, а к JavaScript в целом.

Если вы используете каждый из них, параметры, которые передаются в функцию, поступают из коллекции. Вы не можете передавать пользовательские параметры.

Что вы хотите сделать? Если вы хотите установить #expire, просто сделайте это без each:

$("<option></option>").val('Custom').text(timestamp).appendTo('#expire');

Если вы не знакомы с jQuery, прочитайте учебник .


В других языках, таких как PHP и Python, это означает, что вы задаете значение по умолчанию для параметров. Однако это невозможно в JavaScript (таким образом).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...