Подтвердить что ты не робот

Выключение двойных кавычек в JavaScript-обработчике событий onClick

Простой блок кода ниже может быть подан на статической странице HTML, но приводит к ошибке JavaScript. Как вы должны избегать встроенной двойной кавычки в обработчике onClick (например, xyz)? Обратите внимание, что HTML генерируется динамически, вытаскивая данные из базы данных, данные которой являются фрагментами другого HTML-кода, которые могут иметь один или два цитаты. Кажется, что добавление одного обратного сланца перед символом двойной кавычки не делает трюк.

<script type="text/javascript">
    function parse(a, b, c) {
        alert(c);
    }
</script>

<a href="#x" onclick="parse('#', false, '<a href=\"xyz'); return false">Test</a>
4b9b3361

Ответ 1

Вы пробовали

&quot; или \x22

вместо

\"

?

Ответ 2

Он должен быть с экранированным HTML, а не с Javascript-экранированным. Измените \" на &quot;

Ответ 3

Хотя я согласен с CMS в том, что вы делаете это ненавязчиво (через lib, например jquery или dojo), вот что работает:

<script type="text/javascript">
function parse(a, b, c) {
    alert(c);
  }

</script>

<a href="#x" onclick="parse('#', false, 'xyc&quot;foo');return false;">Test</a>

Причина, по которой это barfs, происходит не из-за JavaScript, а из-за парсера HTML. У него нет понятия об экранированных кавычках, которые он катится по поиску конечной цитаты и находит его и возвращает это как функцию onclick. Это недопустимый javascript, хотя вы не можете найти об ошибке, пока JavaScript не попытается выполнить эту функцию.

Ответ 4

Вы также можете попробовать две обратные косые черты (\\"), чтобы избежать escape-символа.

Ответ 5

Я думаю, что лучший подход - ненавязчиво присвоить обработчик onclick .

Что-то вроде этого:

window.onload = function(){
    var myLink = document.getElementsById('myLinkId');
    myLink.onclick = function(){ 
        parse('#', false, '<a href="xyz');
        return false;
    }
}

//...


<a href="#" id="myLink">Test</a>