Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > JavaScript, Ajax
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.03.2014, 11:52   #1
Armatus
Форумчанин
 
Регистрация: 09.05.2009
Сообщений: 122
По умолчанию Остановка всех скриптов JS при выполнении функции JS.

Собсвенно столкнулся с такой ситуацией, когда:
При загрузке страницы выполняются скрипты анимации меню и текстовый редактор tiny_mce. Если мы не дожидаемся пока анимация закончится и нажимаем кнопку с функцией вызова формы поверх всех элементов(JS) - вся анимация замораживается и что САМОЕ СТРАШНОЕ - при закрытии формы методами javascript(display:none) и jquery(hide()) - ничего не работает что было запущено в фоновом режиме!

Господа гуру JS просвятите в чем беда? синхронный вызов функций?

Функцию которую вызываю по кнопке:

Код:
function image_form_load_show(){
	
	function view_images(callback){
		var event="view_attachments";
		var view_images;
		var xmlhttp = getXmlHttp(); // Создаём объект XMLHTTP
		    		xmlhttp.open('POST', '/admin/script/attachments/attachments_event.php', true); // Открываем асинхронное соединение
		    		xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); // Отправляем кодировку
		    		xmlhttp.send("event=" + encodeURIComponent(event)); // Отправляем POST-запрос
		    		xmlhttp.onreadystatechange = function() { // Ждём ответа от сервера
		      			if (xmlhttp.readyState == 4) { // Ответ пришёл
		       		 		if(xmlhttp.status == 200) { // Сервер вернул код 200 (что хорошо)
						callback(xmlhttp.responseText);		 		
						}
		      			}
		  		};
	}
view_images(function(resp){
document.body.innerHTML+='<div style="padding: 10px; width:80%; position: absolute; top: 120px; left:10%; z-index: 999;" id="image_upload"><div style="width:100%; background: #d2d2ff; border: 3px rgb(46, 103, 153) solid;   text-align:center; vertical-align: middle; border-radius: 20px; box-shadow: 0px 0px 15px rgba(0, 0, 0, 0.4); padding: 15px; "><div><h2 align=center>Выбрать титульное изображение:</h2><div style="background: white; border: 3px solid rgb(46, 103, 153); margin-top: 10px; overflow-y: scroll; height: 400px;">'+resp.replace(/width="170px"/gi,'width="70px"')+'</div><div style="margin-top: 10px;"><span style="display: inline-block; width: 100%; text-align: left;"><form action="/admin/script/content/upload.php" method="post" target="hiddenframe" enctype="multipart/form-data" onsubmit="hideBtn();" style=""><input type="file" id="userfile" name="userfile" /><div id="res"></div><iframe id="hiddenframe" name="hiddenframe" style="width:0px; height:0px; border:0px"></iframe><span style="font-size: medium;"><input type="submit" name="upload" id="upload" value="Загрузить" style="margin-top: 5px;"/><span class="button" onclick="catalog_close_all_form()" id="catalog_close_all_form" style="float:right;"><span>Закрыть</span></span></span></span></div></form></div></div>';})
}

Последний раз редактировалось Armatus; 12.03.2014 в 11:56.
Armatus вне форума Ответить с цитированием
Старый 12.03.2014, 12:32   #2
Naive
Раздолбайских Дел
Старожил
 
Аватар для Naive
 
Регистрация: 22.05.2009
Сообщений: 3,828
По умолчанию

обрубается потому что ты переписываешь все dom-дерево
Код:
document.body.innerHTML+=
все события, кроме живых сбросятся; а может даже и живые сдохнут; я такой трешак не встречал еще.
Тормозить может из-за конкатенации длинных строк, рофлоу всего дерева элементов... фиг знает причин может быть масса.
Попробуй для начала адекватно создать элемент и закинуть его в дерево.
Код:
var tmp = document.createElement('div');
tmp.innerHTML = 'строка';
document.body.appendChild(tmp);
конкатенация должна быстрей работать при склейке массива через джойн
Код:
// вместо
'1'+'2'+'3';
// юзаем
['1','2','3'].join('');
но вроде эта бага была только в ИЕ8
Alar, верни репу!
Naive вне форума Ответить с цитированием
Старый 12.03.2014, 13:10   #3
Armatus
Форумчанин
 
Регистрация: 09.05.2009
Сообщений: 122
По умолчанию

Ситуация ясна. Буду исправляться. Спасибо за ответ. Все работает. =)

Последний раз редактировалось Armatus; 12.03.2014 в 13:17.
Armatus вне форума Ответить с цитированием
Старый 12.03.2014, 16:47   #4
Armatus
Форумчанин
 
Регистрация: 09.05.2009
Сообщений: 122
По умолчанию

Нашел такой вот пример:
Код:
document.body.removeChild(document.getElementById(id));
Который позволяет удалить элемент в дереве после body.
Собственно назрел вопрос - как вывести полное дерево до элемента document.getElementById(id)? Т.е. хочу удалить тег по id если его родитель не body а друго тег, динамически меняюшийся.
Armatus вне форума Ответить с цитированием
Старый 12.03.2014, 17:15   #5
Armatus
Форумчанин
 
Регистрация: 09.05.2009
Сообщений: 122
По умолчанию

При таком добавление формы:

Код:
view_images(function(resp){
var tmp = document.createElement('div');
tmp.id="image_upload";
tmp.innerHTML = '<div style="padding: 10px; width:80%; position: absolute; top: 120px; left:10%; z-index: 999;">
<div style="width:100%; background: #d2d2ff; border: 3px rgb(46, 103, 153) solid;   text-align:center; vertical-align: middle; border-radius: 20px; box-shadow: 0px 0px 15px rgba(0, 0, 0, 0.4); padding: 15px; ">
<div><h2 align=center>Выбрать титульное изображение:</h2>
<div id="form_image_out" style="background: white; border: 3px solid rgb(46, 103, 153); margin-top: 10px; overflow-y: scroll; height: 400px;">'+resp+'</div>
<div style="margin-top: 10px;"><span style="display: inline-block; width: 100%; text-align: left;">
<form action="/admin/script/content/upload.php" method="post" target="hiddenframe" enctype="multipart/form-data" onsubmit="hideBtn();" style="">
<input type="file" id="userfile" name="userfile" /><div id="res"></div>
<iframe id="hiddenframe" name="hiddenframe" style="width:0px; height:0px; border:0px"></iframe>
<span style="font-size: medium;"><input type="submit" name="upload" id="upload" value="Загрузить" style="margin-top: 5px;"/>
<span class="button" onclick="catalog_close_all_form(\'image_upload\')" id="catalog_close_all_form" style="float:right;"><span>Закрыть</span>
</span></span></span></div></form></div></div>';
document.body.appendChild(tmp);
пытаюсь заменить контент в теге по id при нажатии кнопки:

Код:
view_images(function(resp){document.getElementById("form_image_out").innerHTML=resp;});
В ответ получаю :

Цитата:
--
[17:08:49.085] TypeError: document.getElementById(...) is null @ http://bitcom32.ru/admin/script/content/content.js:126
Толи я не вижу очевидного, толи в дерево DOM не попал тег с id form_image_out?
Подозреваю что по причине tmp.innerHTML

Последний раз редактировалось Armatus; 12.03.2014 в 17:17.
Armatus вне форума Ответить с цитированием
Старый 12.03.2014, 17:17   #6
Naive
Раздолбайских Дел
Старожил
 
Аватар для Naive
 
Регистрация: 22.05.2009
Сообщений: 3,828
По умолчанию

parentNode или parentElement, выбрать стоит тот, который работает в ИЕ8, ибо какой-то из них, чует мое сердце, был добавлен в js1.6.

upd: По второму посту, если браузер отрисовал изменения, значит элемент должен был быть добавлен. Думаю, ошибка где-то в другом месте.
Возможно, ты пытаешься выполнить этот код до прихода аякса, обычно это не учитывают новички.
Alar, верни репу!

Последний раз редактировалось Naive; 12.03.2014 в 17:22.
Naive вне форума Ответить с цитированием
Старый 12.03.2014, 17:22   #7
Armatus
Форумчанин
 
Регистрация: 09.05.2009
Сообщений: 122
По умолчанию

На это можно не отвечать. Это я уже что то дико туплю =)
Цитата:
Сообщение от Armatus Посмотреть сообщение
При таком добавление формы:

Код:
view_images(function(resp){
var tmp = document.createElement('div');
tmp.id="image_upload";
tmp.innerHTML = '<div style="padding: 10px; width:80%; position: absolute; top: 120px; left:10%; z-index: 999;">
<div style="width:100%; background: #d2d2ff; border: 3px rgb(46, 103, 153) solid;   text-align:center; vertical-align: middle; border-radius: 20px; box-shadow: 0px 0px 15px rgba(0, 0, 0, 0.4); padding: 15px; ">
<div><h2 align=center>Выбрать титульное изображение:</h2>
<div id="form_image_out" style="background: white; border: 3px solid rgb(46, 103, 153); margin-top: 10px; overflow-y: scroll; height: 400px;">'+resp+'</div>
<div style="margin-top: 10px;"><span style="display: inline-block; width: 100%; text-align: left;">
<form action="/admin/script/content/upload.php" method="post" target="hiddenframe" enctype="multipart/form-data" onsubmit="hideBtn();" style="">
<input type="file" id="userfile" name="userfile" /><div id="res"></div>
<iframe id="hiddenframe" name="hiddenframe" style="width:0px; height:0px; border:0px"></iframe>
<span style="font-size: medium;"><input type="submit" name="upload" id="upload" value="Загрузить" style="margin-top: 5px;"/>
<span class="button" onclick="catalog_close_all_form(\'image_upload\')" id="catalog_close_all_form" style="float:right;"><span>Закрыть</span>
</span></span></span></div></form></div></div>';
document.body.appendChild(tmp);
пытаюсь заменить контент в теге по id при нажатии кнопки:

Код:
view_images(function(resp){document.getElementById("form_image_out").innerHTML=resp;});
В ответ получаю :



Толи я не вижу очевидного, толи в дерево DOM не попал тег с id form_image_out?
Подозреваю что по причине tmp.innerHTML
Armatus вне форума Ответить с цитированием
Старый 12.03.2014, 17:25   #8
Armatus
Форумчанин
 
Регистрация: 09.05.2009
Сообщений: 122
По умолчанию

Спасибо =)
Armatus вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Одновременное завершение всех параллельно работающих копий скриптов WennY PHP 13 11.03.2012 01:31
Остановка видео при закрытии Ko$ Общие вопросы Delphi 3 16.12.2011 21:45
Ошибка при выполнении функции DSum. Dmitriy_Egorov Microsoft Office Access 13 28.08.2011 01:46
Остановка работы функции Alexcomeback Общие вопросы по Java, Java SE, Kotlin 3 12.01.2011 09:45
Остановка ADODS при OnFetchProcess QuAlex БД в Delphi 0 04.10.2007 17:31