Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 15.03.2013, 21:05
Аватар для KOTShalun
Новичок на форуме
Отправить личное сообщение для KOTShalun Посмотреть профиль Найти все сообщения от KOTShalun
 
Регистрация: 15.03.2013
Сообщений: 8

Загрузка скрипта в DIV
Добрый день.

Сразу прощу прощения за глупость вопроса.
Но немного подвис в решение данного вопроса. И так у меня есть "Меню". По кликам на которое у меня загружается в <DIV> некая страница через load.
<div id="content"></div>

<script>
$("menu").click(function(){
$('#content').load('page.php');
});	
</script>

И казалось бы всё чудненько. За исключением того, что в подгружаемом файлике page.php живёт ещё один скрипт вот такой вот строке.
<script type="text/javascript" src="js/info.js"></script>

В результате чего всё работает чудно. Подгружаются разные страницы скрипты в подгружаюмых страницах тоже и дажа ajax запросы выполняются. За исключением, того, что слишком старательно работают. А точнее ровно столько раз отрабатываются, столько раз я на эту страницу заходил.
Предположим я заходил в меню которое подгружало станицу page.php пять раз. И если теперь я нажму на запрос к ajax. Он отработает так же пять раз.
Я конечно понимаю, что это скрипт загрузился пять раз и сидит в памяти. А вот где он сидит не понятно. А главное как его от туда достать? Когда я смотрю всё, что натворил через FireBug в Мозиле, я их просто не вижу. =(
Может кто то сталкивался с подобным бредом? Всё победил, только этот момент остался. А учитывая, что проект навигации уже готов, перепиливать всё заново не реально. =(

Фув. Аж сам запутался...
Заранее спасибо за конструктив!
Ответить с цитированием
  #2 (permalink)  
Старый 15.03.2013, 21:15
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Решение простое - не подключать скрипт несколько раз. Проще создать один js-файл и в контроллере вызывать нужные функции при подгрузке страницы.
тег script - это всего лишь источник файла. После выполнения скрипта неважно что ты сделаешь с этим тегом. Создадутся нужные функции, установятся обработчики событий, все это будет сидеть в памяти и продолжать работать.
Ответить с цитированием
  #3 (permalink)  
Старый 15.03.2013, 21:19
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

<button>Кликни</button>
<script>
    var button = document.querySelector('button');
    button.addEventListener('click', function() {
        alert('Я работаю');
    });
    
    var script = document.querySelector('script');
    script.parentNode.removeChild(script);
    
    alert(document.querySelector('script'));
</script>
Ответить с цитированием
  #4 (permalink)  
Старый 15.03.2013, 21:44
Аватар для KOTShalun
Новичок на форуме
Отправить личное сообщение для KOTShalun Посмотреть профиль Найти все сообщения от KOTShalun
 
Регистрация: 15.03.2013
Сообщений: 8

Проблема в том, что подгружаемых страниц очень много. И у многих большое кол-во одинаковых элементов. Кода собралось уже столько, что разобраться нереально во всём. Меню полностью динамическое оно собирает файлики в папке и генерит по ним меню, пункты меню по факту различные модули, от разных разработчиков. И всё было так чудно, пока не столкнулся с этой проблемой.
Может быть можно как то удалять из памяти эти функции?
Ответить с цитированием
  #5 (permalink)  
Старый 15.03.2013, 21:45
Аватар для KOTShalun
Новичок на форуме
Отправить личное сообщение для KOTShalun Посмотреть профиль Найти все сообщения от KOTShalun
 
Регистрация: 15.03.2013
Сообщений: 8

Сообщение от danik.js Посмотреть сообщение
<button>Кликни</button>
<script>
    var button = document.querySelector('button');
    button.addEventListener('click', function() {
        alert('Я работаю');
    });
    
    var script = document.querySelector('script');
    script.parentNode.removeChild(script);
    
    alert(document.querySelector('script'));
</script>
Спасибо за совет. =) Нашел мало знакомых буквосочетаний. Ушел курить мат часть, чтобы понять совет пока не сталкивался с addEventListener и подобными. Разберусь, может пойму. =)
Ответить с цитированием
  #6 (permalink)  
Старый 15.03.2013, 21:52
Аватар для KOTShalun
Новичок на форуме
Отправить личное сообщение для KOTShalun Посмотреть профиль Найти все сообщения от KOTShalun
 
Регистрация: 15.03.2013
Сообщений: 8

Кстати, ещё один интересный момент. Эта проблема срабатывает, только с объектами к которым обращаюсь по типу класса т.е. $('.name') при заполнении модальной формы из базы. Когда же я её отправляю аяксом уже с изменениями в ПХП всё Ок. Один раз отработал как часы и всё...
Ответить с цитированием
  #7 (permalink)  
Старый 15.03.2013, 22:05
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

При выгрузке страницы удаляй все навешанные обработчики событий.
Ответить с цитированием
  #8 (permalink)  
Старый 15.03.2013, 22:40
Аватар для KOTShalun
Новичок на форуме
Отправить личное сообщение для KOTShalun Посмотреть профиль Найти все сообщения от KOTShalun
 
Регистрация: 15.03.2013
Сообщений: 8

Сообщение от danik.js Посмотреть сообщение
При выгрузке страницы удаляй все навешанные обработчики событий.
Можно попросить, пример или примерно путь в котором нужно двигаться по коду? Как то не совсем хорошо тема гуглится. Но думаю найду рано или поздно...
Ещё раз спасибо. =) Клёвый аватарчик...
Ответить с цитированием
  #9 (permalink)  
Старый 15.03.2013, 22:48
Аватар для KOTShalun
Новичок на форуме
Отправить личное сообщение для KOTShalun Посмотреть профиль Найти все сообщения от KOTShalun
 
Регистрация: 15.03.2013
Сообщений: 8

С .unbind() тоже сталкиваюсь в первые. Сколько же ещё не знаю то. =)
Похоже нужно будет играться с ним. Сейчас попробую решить вопрос освобождаю по классу $('.foo').unbind('click'); по результату отпишусь, но это не очень универсальный выход как мне кажется...
Ответить с цитированием
  #10 (permalink)  
Старый 15.03.2013, 22:58
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Проблема скорее всего в другом. Покажи пример скрипта в файле.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Загрузка изображения в конкретный div any.zicky jQuery 2 30.07.2012 18:36
Загрузка скрипта по ошибке 404 ikarushka Общие вопросы Javascript 10 28.11.2010 04:26
Загрузка скрипта в блок [MI_nor] Events/DOM/Window 2 04.10.2010 14:24
Загрузка скрипта с локального комьютера uncher AJAX и COMET 49 04.02.2009 23:12
Загрузка внешнего скрипта... viliv Общие вопросы Javascript 26 26.01.2009 13:21