Как мне избежать строки внутри кода JavaScript внутри обработчика onClick? - PullRequest
63 голосов
/ 19 сентября 2008

Может быть, я просто слишком обдумывал это, но у меня возникла проблема с выяснением того, что можно использовать в строке в некотором коде JavaScript внутри обработчика ссылки onClick. Пример:

<a href="#" onclick="SelectSurveyItem('<%itemid%>', '<%itemname%>'); return false;">Select</a>

В <%itemid%> и <%itemname%> происходит замена шаблона. Моя проблема в том, что имя элемента может содержать любой символ, включая одинарные и двойные кавычки. В настоящее время, если он содержит одинарные кавычки, он нарушает код JavaScript.

Моей первой мыслью было использование функции языка шаблонов для JavaScript-экранирования имени элемента, которое просто экранирует кавычки. Это не исправит случай строки, содержащей двойные кавычки, которая нарушает HTML-код ссылки. Как обычно решается эта проблема? Нужно ли HTML-экранировать весь обработчик onClick?

Если это так, то это выглядело бы действительно странно, поскольку функция escape для языка шаблонов также HTMLify скобок, кавычек и точек с запятой ...

Эта ссылка создается для каждого результата на странице результатов поиска, поэтому создание отдельного метода внутри тега JavaScript невозможно, поскольку мне нужно сгенерировать его для каждого результата.

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

Ответы [ 13 ]

0 голосов
/ 11 марта 2011

Я столкнулся с той же проблемой, и я решил ее хитрым способом. Сначала создайте глобальные переменные v1, v2 и v3. И в onclick отправьте индикатор, 1, 2 или 3 и в проверке функции для 1, 2, 3, чтобы поставить v1, v2 и v3 как:

onclick="myfun(1)"
onclick="myfun(2)"
onclick="myfun(3)"

function myfun(var)
{
    if (var ==1)
        alert(v1);

    if (var ==2)
        alert(v2);

    if (var ==3)
        alert(v3);
}
0 голосов
/ 19 сентября 2008

Любой хороший движок шаблонов, достойный своей соли, будет иметь функцию «escape-кавычек». Наша (также доморощенная, где я работаю) также имеет функцию экранирования кавычек для javascript. В обоих случаях переменная шаблона затем просто добавляется с помощью _esc или _js_esc, в зависимости от того, что вы хотите. Вы никогда не должны выводить пользовательский контент в браузер, который не был экранирован, ИМХО.

0 голосов
/ 19 сентября 2008

Здесь приведены ответы, что вы не можете избежать кавычек с помощью JavaScript и что вам нужно начинать с экранированных строк.

Таким образом. У JavaScript нет способа справиться со строкой », - сказала Мардж:« Я бы посмотрел, что было »для Питера, и вам нужно очистить данные перед тем, как предлагать их сценарию?

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