Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Способ заключать в строки (https://javascript.ru/forum/misc/54108-sposob-zaklyuchat-v-stroki.html)

psiklop 04.03.2015 01:03

Способ заключать в строки
 
В учебнике написано что строки можно заключать в одинарные и двойные кавычки, мне нужно было написать такой код:

на кнопке INPUT поставил атрибут onclick
так onclick= ' код '

далее мне в коде надо было вызвать функцию eval
написал так onclick= ' eval("код") '

далее мне в коде eval нужно использовать такой код document.getElementsByName()
тоесть опять нужно передать строку но я не могу уже использовать не двойные не одинарные кавычки так как они использованы выше
я использовал этот символ ` в firefox работает
можно ли заключать строки в этот символ будет ли работать во всех браузерах? кто знает? или я чего то не догоняю?

Вячеслав Александрович 04.03.2015 01:22

А как на счет экранирования?
onclick= ' eval(\'код\') '

psiklop 04.03.2015 03:29

не работает пробовал

danik.js 04.03.2015 08:21

Цитата:

Сообщение от Вячеслав Александрович
А как на счет экранирования?

Экранировать надо по правилам языка, в котором код пишешь.

В первую очередь мы пишем в HTML, потому как в первую очередь работает HTML-парсер, разбирая наш документ. А в атрибутах кавычки нужно заменять html-мнемониками:

onclick="eval("код")"

onclick='eval('код')'


Либо комбинировать кавычки (как в js):

onclick="eval('код')"

При этом не забываем что мы пишем все-таки js код, хоть и внутри html. HTML-парсер, разобрав документ, передает js-код из атрибута onclick в js-движок, поэтому экранировать надо и по правилам js:


onclick="eval("alert(\"строка\")")"


Смотрим:

<button onclick="eval(&quot;alert(\&quot;строка\&quot;)&quot;)">Click me</button>


Eval - зло. Чайники его любят использовать даже тогда, когда этого вообще не требуется ))

Инлайновые onclick'и - тоже не есть хорошо. Навешивайте обработчики из js и не придется извращаться с экранированием.

psiklop 04.03.2015 12:13

понятно, спасибо

danik.js 04.03.2015 13:22

Цитата:

Сообщение от psiklop
получается html-мнемоники попадают в js движок как есть?

не, их схавает html парсер. Это всего лишь способ записи кавычки внутри строки для html-парсера. Надо же как-то записать кавычку так, чтобы она не считалась закрывающей строку. Вот и придумали такой способ записи.

В js иной способ экранирования - слэш. В атрибутах событий приходится экранировать сразу по двум правилам.

ksa 04.03.2015 13:24

Цитата:

Сообщение от psiklop
не работает пробовал

Бытует мнение, что в JS вообще мало чего работает... :D

Бивас, тест! (с)

alert('Это \'тест\' экранирования');

Таки работает! :D

psiklop 04.03.2015 13:29

извиняюсь за тупость, html парсер схавает мнемоник а что он передаст вместо него в js движок?

psiklop 04.03.2015 13:35

он преобразуется в кавычку?

psiklop 04.03.2015 13:47

вроде разобрался, кстати этот символ ` работает на firefox в js движке а в ie не работает
alert(`строка`);


Часовой пояс GMT +3, время: 21:30.