Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Скрипт на JS не работает без перезагрузки страницы (https://javascript.ru/forum/events/23170-skript-na-js-ne-rabotaet-bez-perezagruzki-stranicy.html)

densmith 14.11.2011 23:14

Скрипт на JS не работает без перезагрузки страницы
 
Имеем в теге <head> следующее:

<script type='text/javascript' src='http://_путь_к_скрипту_/script1.js'></script>


Имеем функцию (JS):

function changeScript() {
   var head = document.getElementsByTagName('head')[0];
   var script = document.createElement('script');
   script.setAttribute('type', 'text/javascript');
   script.setAttribute('src', 'http://_путь_к_скрипту_/script2.js');
   head.insertBefore(script, head.firstChild);
   head.appendChild(script);
}


имеем событие, вызывающее данную функцию (допустим, кнопка с onClick)
По великой идее при нажатии на кнопку должны выполняться всякие колдоства с аяксом (к делу не относится) и сменяться скрипт. Все происходит так как нужно, т.е. в <head> появляется именно требуемое:
<script type='text/javascript' src='http://_путь_к_скрипту_/script2.js'></script>

но исполняется первый вариант. Перезагрузка страницы - исключена. Как заставить работать второй скрипт?

Почемучкин 14.11.2011 23:48

А попробуй-ка
script.outerHTML = script.outerHTML
иногда это используют для подталкивания изменений

densmith 15.11.2011 00:24

Вроде оживает. Но теперь там два скрипта сидят (первый никуда не исчез). А так как там переменные и функции с одинаковыми именами - начинается катавасия.

Может еще у тебя есть какой-нить вариант по удалению предыдущего скрипта из кода? Спасибо.

trikadin 15.11.2011 01:57

Цитата:

Сообщение от densmith
Может еще у тебя есть какой-нить вариант по удалению предыдущего скрипта из кода? Спасибо.

Нету такого варианта) Назови их по-разному.

densmith 15.11.2011 14:08

Внесу дополнительную ясность:

<head>
...
    <script type="text/javascript" src="http://_path_to_/engine.js"></script>
    <script type="text/javascript" src="http://_path_to_/javascript.js"></script>
    <script type="text/javascript" src="http://_path_to_/calendar.js"></script>
    <script type="text/javascript" src="http://_path_to_/calendar-ru.js"></script>
</head>


Аяксом на onClick сменяется содержимое ДИВа на страничке. Файл calendar-ru.js содержит лангпак для календаря. На тот же самый onClick должен меняться и лангпак на calendar-en.js, или calendar-de.js

Все так и происходит. Но переменные остаются из самого первого файла плюс добавляются из второго, плюс из третьего, если уж начать по языкам кликать. Единственное на данный момент, но неприемлемое решение - это location.reload(); Суть - избавиться от переменных свойственных "предыдущему" языку.

Ну как-то так. Спасибо заранее.

dmitriymar 15.11.2011 14:20

Цитата:

Сообщение от densmith
function changeScript() {
var head = document.getElementsByTagName('head')[0];
var script = document.createElement('script');
script.setAttribute('type', 'text/javascript');
script.setAttribute('src', 'http://_путь_к_скрипту_/script2.js');
head.insertBefore(script, head.firstChild);
head.appendChild(script);
}

ну и посмотри сам на механизм свой.
добавить ещё один файл js в дерево документа. ключевое слово добавить
Цитата:

Сообщение от densmith
Но переменные остаются из самого первого файла плюс добавляются из второго, плюс из третьего, если уж начать по языкам кликать.

но они то у тебя глобальные наверно?)
Цитата:

Сообщение от densmith
Суть - избавиться от переменных свойственных "предыдущему" языку.

при загрузке нового файла-в его теле создай функцию поиска "лишних" и их удаления.
http://javascript.ru/delete


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