Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 03.11.2011, 17:20
vls vls вне форума
Новичок на форуме
Отправить личное сообщение для vls Посмотреть профиль Найти все сообщения от vls
 
Регистрация: 17.04.2009
Сообщений: 4

DOM элемент клонируется при хранении в хэше
Проблема на десятой строке.
Приложение (опрос) при переходе на другую страничку проверяет, есть ли она в кэше и либо подгружает либо показывает. Прячет предыдущую страничку нормально, но действия с уже имеющимися ранее дивами производятся не отражаясь в реальном DOM, свойства меняются только у элементов хэша.
Как будто при сохранении они передаются по ссылке и после изменения связь с реальной страничкой обрывается.
Яндекс с Гуглом на эту тему говорят что DOM элементы передаются только по ссылке, чтоб клонировать их нужно вызывать соответствующую функцию. А тут это происходит самопроизвольно.
Наблюдается во всех браузерах.

this.go_page = function(url) {
		params = url.split('?')[1];
		if (!params) {params = 'page='+(this.page+1);}
		params+=('&id='+this.id);

		var to_page = params.match(/page\=(\d+)/i)[1];
		if (this.cashe[this.lang]['page_'+to_page]!=undefined) {
			var prev = this.cashe[this.lang]['page_'+this.page];
			prev.style.display = 'none';
			var curr = this.cashe[this.lang]['page_'+to_page];
			curr.style.display = 'block';
			this.page = to_page;
			self.updatePos();
		} else {
			new azsrw_Request(params, function(response) {
				var prev = self.cashe[self.lang]['page_'+self.page];
				var container = document.getElementById(self.opts.ns+'survey_'+self.id);
				prev.style.display = 'none';

				container.innerHTML+=response.match(/(\<div class\=\"azsw\-content\"\>[\s\S]*\<\/div\>)[\s\S]*\<\/div\>/)[1];

				self.page = this.params.page;
				var pages = [];
				var subdivs = container.childNodes;
				for (var i=0; i<subdivs.length; i++) {
					if (subdivs[i].nodeType==1) if (subdivs[i].tagName.toLowerCase()=='div') {
						pages.push(subdivs[i]);
					}
				}
				self.cashe[self.lang]['page_'+self.page] = pages[pages.length-1];
				var curr = self.cashe[self.lang]['page_'+self.page];
				self.paginator(curr);
				self.updatePos();
			});
		}
	}
Ответить с цитированием
  #2 (permalink)  
Старый 04.11.2011, 14:57
vls vls вне форума
Новичок на форуме
Отправить личное сообщение для vls Посмотреть профиль Найти все сообщения от vls
 
Регистрация: 17.04.2009
Сообщений: 4

Отловил. Проблема в innerHTML+=response, он перезаписывает весь контент и слетают ссылки на все элементы и события у этих элементов, в хэше остаются их трупики.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Новый элемент отсутствует в DOM модели StrSprut jQuery 4 19.09.2011 12:50
Как узнать находится ли DOM элемент в области видимости? phgrey Общие вопросы Javascript 4 22.03.2011 19:05
Как добавить элемент в XML через DOM используя PHP? bayah Серверные языки и технологии 6 11.08.2010 13:33
Как узнать содержит ли DOM определенный элемент Ruslan Events/DOM/Window 8 12.03.2010 22:02
Закрыть элемент при клике вне его masterm Общие вопросы Javascript 3 31.07.2009 11:27