Страница 1 из 1

Почему джаваскрипт выполняется сразу после загрузки?

СообщениеДобавлено: 29.08.2015 (Сб) 11:18
ndemidov
Вопрос возможно глупый. Добавляем к html-тэгу (jQuery-методом append) html-код, который является javascript'ом. То есть представляет собой <script> ... </script>. Почему он сразу выполняется?

Re: Почему джаваскрипт выполняется сразу после загрузки?

СообщениеДобавлено: 29.08.2015 (Сб) 14:03
Хакер
А когда должен? Начиная с первого числа следующего месяца?

СообщениеДобавлено: 31.08.2015 (Пн) 18:15
Qwertiy
Это фича jQuery, насколько я знаю. А что именно не устраивает?

Re: Почему джаваскрипт выполняется сразу после загрузки?

СообщениеДобавлено: 31.08.2015 (Пн) 21:45
iGrok
Qwertiy писал(а):насколько я знаю

Неправильно знаешь.

СообщениеДобавлено: 01.09.2015 (Вт) 13:08
Qwertiy
iGrok писал(а):Неправильно знаешь.

Что именно я знаю неправильно?
http://jsfiddle.net/xyewkzfc/ - нативный вариант на консоль ничего не выводит, хотя тег со скриптом добавляется.

Re: Почему джаваскрипт выполняется сразу после загрузки?

СообщениеДобавлено: 02.09.2015 (Ср) 1:53
iGrok
http://jsfiddle.net/aux9gt0L/

А для чего может понадобиться твой "нативный" вариант (и зачем нужен неисполняющийся js-код, и как его вообще можно использовать) - я не понимаю.

СообщениеДобавлено: 02.09.2015 (Ср) 18:56
Qwertiy
Разница в том, что ты добавляешь элемент, а я - разметку. А у jQuery фича - он делает eval для попавшихся скриптов.
Зачем надо добавлять без выполнения скриптов? Не знаю. Как вариант вот такой код: document.head.innerHTML += "<style>#smth { color: red; }</style>" - предлагаешь все скрипты повторно выполнить?

Re: Почему джаваскрипт выполняется сразу после загрузки?

СообщениеДобавлено: 02.09.2015 (Ср) 23:37
iGrok
Qwertiy писал(а):Разница в том, что ты добавляешь элемент, а я - разметку.

Да. Но какой в этом смысл?
Хакер правильно спросил - когда же он должен тогда выполняться? В понедельник? Через 42 секунды? Когда юзер наберёт на клавиатуре "абракадабра" и трижды дунет?
Если этот блок не выполнится в момент добавления, он не выполнится никогда, а значит и добавлять его незачем.

Qwertiy писал(а):предлагаешь все скрипты повторно выполнить?

Предлагаю не использовать такой код, а добавлять элемент style в head. И вообще никогда не использовать +=-подход в отношении элементов dom. Это самая что ни на есть bad practice.

СообщениеДобавлено: 03.09.2015 (Чт) 13:03
Qwertiy
iGrok писал(а):Если этот блок не выполнится в момент добавления, он не выполнится никогда, а значит и добавлять его незачем.

Никогда - тоже вариант.
И мало ли, зачем его можно добавить. Как минимум, его можно прочитать потом. А ещё, его можно отобразить: http://jsfiddle.net/xyewkzfc/1/.

iGrok писал(а):Это самая что ни на есть bad practice.

Если что-то является bad practice, это ни капельки не означает, что никто так не делает.

Re: Почему джаваскрипт выполняется сразу после загрузки?

СообщениеДобавлено: 04.09.2015 (Пт) 0:40
iGrok
Qwertiy писал(а):И мало ли, зачем его можно добавить. Как минимум, его можно прочитать потом. А ещё, его можно отобразить: http://jsfiddle.net/xyewkzfc/1/.

Для этого есть масса "штатных" способов. Незачем так извращаться.

Qwertiy писал(а):Если что-то является bad practice, это ни капельки не означает, что никто так не делает.

Ну так пусть не удивляется, что при этом что-то может выполниться дважды. ССЗБ же.
Хотя я, конечно, не проверял, реально ли скрипты выполнятся дважды в таком варианте. По идее, должны.

СообщениеДобавлено: 04.09.2015 (Пт) 12:28
Qwertiy
iGrok писал(а):Хотя я, конечно, не проверял, реально ли скрипты выполнятся дважды в таком варианте. По идее, должны.

Нет, не выполняются и не должны. При изменении разметки через innerHTML и insertAdjacentHTML скрипты в новой разметке не выполняются.
А вот в jQuery решили, что выполнять их всё-таки надо и, похоже, где-то делают eval.

Re: Почему джаваскрипт выполняется сразу после загрузки?

СообщениеДобавлено: 05.09.2015 (Сб) 9:38
ndemidov
Хакер писал(а):А когда должен? Начиная с первого числа следующего месяца?

Просто надо было загрузить скрипт аяксом и выполнить его. И я призадумался, что не знаю как это работает. Предположил - не выполнится ли код при вставке вручную - выполнился. Решил спросить)