#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);'
Комментариев нет:
Отправить комментарий