Страницы

Поиск по вопросам

вторник, 25 февраля 2020 г.

Экранирование кавычек в JS

#javascript #экранирование


Почему так не работает?  

onMouseOut="setTimeout('alert(\"You went away from me\")', 1000);"


А так работает?

onMouseOut="setTimeout('alert(\'You went away from me\')', 1000);"

    


Ответы

Ответ 1



Потому что это html-разметка и вместо кавычек надо писать ": onMouseOut="setTimeout('alert("You went away from me")', 1000);" Но вообще, так делать не надо. Проблема именно в html-разметке. Если попытаться выполнить такое же присваивание в джаваскрипте, то первый код корректен, а второй - нет (экранируется апостроф, в строке остаётся апостроф и результат кривой - надо \\'). Но у html правила экранирования другие и обратный слеш оказывается во внутренней строке, не оказывая влияния на значение атрибута. Именно поэтому вторая строка корректна, а первая преждевременно кавычкой закрывает атрибут. PS: а имена атрибутов-событий по правилам пишутся полностью маленькими буквами. function test1() { eval("console.log('\'text\'')"); // Это текст из правильного варианта - тут такое не годится } function test2() { eval("console.log(\"'text'\")"); // Экранируются символы во внешней строке, не экранируется во внутренней } function test3() { eval("console.log('\\'text\\'')"); // Чтобы экранировать апостроф во внутренней строке надо экранировать сам обратный слеш во внешней } button { margin-bottom: .25em; }








Ответ 2



Потому что кавычки для экранирования не должны быть подобны кавычкам переменной. То есть если var variable = "", то внутри должно быть 'text', чтобы экранирование 'text' выполнялось(и наоборот). В Вашем же случае этот код будет: onMouseOut='setTimeout("alert(\"You went away from me\")", 1000);'

Комментариев нет:

Отправить комментарий