Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Передача переменных (https://javascript.ru/forum/misc/25958-peredacha-peremennykh.html)

Igor_Komarov 21.02.2012 12:32

Передача переменных
 
Столкнулся с проблемой, решить которую никак не удаётся. Суть проблемы в следующем

В html вывожу страницу с сообщениями в теле каждого кнопка "Ответить", при клике на которой создаю скриптом div в теле сообщения, кнопка которого сработала. В этом диве как newdiv.innerHTML="<FORM id=\"form\"><DIV class=\"...</div></form>"; вывожу форму отправки сообщения с соответствующей кнопкой.
Так вот, для отправки формы нужен динамический URL и пару изменяемых переменных (к примеру, id родительского сообщения). Но всё что я передаю в скриптовую функцию прорисовки div-а, хоть и выводится при контроле в alert(), при этом не определяется скриптом в html тегах как переменные. Запись вызываемой функции в динамически прорисованом диве выглядит приблизительно так:
newdiv.innerHTML = "<FORM id=\"form\"><textarea cols=\"8\" rows=\"6\" id=\"sender_message\" name=\"sender_message\"></textarea><INPUT value=\"Отправить\" type=\"Button\" name=\"Button\" onclick=\"doit(url,this.form,'mcontent','',use); return false;\"></FORM>";

где url и use передаваемые в функцию переменные (выше отображена только часть функции).
Я понимаю что в указаной прорисовке переменные видятся скриптом как текст, но все мои попытки изменить ситуацию пока что безрезультатны.

Igor_Komarov 21.02.2012 12:36

на всякий случай приведу тело функции целиком:
function creatediv(target,url,use) {
alert(url);
alert(use);
	var div = document.getElementById('newmsg');
	if (div != null) {
		div.parentNode.removeChild(div);
	}
	var newdiv = document.createElement('div');
	newdiv.setAttribute('id', 'newmsg');
	newdiv.setAttribute('display', 'block');
	newdiv.style.position = "relative";
	newdiv.style.margin = "20px";
	newdiv.innerHTML = "<FORM id=\"form\"><DIV class=\"fm-req\"><LABEL for=\"sender_subject\">Заголовок:</LABEL> <INPUT id=\"sender_subject\" type=\"text\" name=\"sender_subject\" size=\"32\" maxlength=\"32\"> </DIV><DIV class=\"fm-req\"><br> <textarea cols=\"8\" rows=\"6\" id=\"sender_message\" name=\"sender_message\"></textarea></DIV><DIV class=\"fm-submit fm-req\"><INPUT value=\"Отправить\" type=\"Button\" name=\"Button\" onclick=\"doit(url,this.form,'mcontent','',use); return false;\"></DIV></FORM>";
	document.getElementById(target).appendChild(newdiv);
}

Из того что я говорил выше, алерты выводят указаные переменные, но вот функции doit они не видны (это и понятно, они видятся ей простой строкой).

cmygeHm 21.02.2012 13:48

newdiv.innerHTML = "<FORM id=\"form\"><DIV class=\"fm-req\"><LABEL for=\"sender_subject\">Заголовок:</LABEL> <INPUT id=\"sender_subject\" type=\"text\" name=\"sender_subject\" size=\"32\" maxlength=\"32\"> </DIV><DIV class=\"fm-req\"><br> <textarea cols=\"8\" rows=\"6\" id=\"sender_message\" name=\"sender_message\"></textarea></DIV><DIV class=\"fm-submit fm-req\"><INPUT value=\"Отправить\" type=\"Button\" name=\"Button\" onclick=\"doit("+url+",this.form,'mcontent','',"+use+"); return false;\"></DIV></FORM>";

Igor_Komarov 21.02.2012 14:06

Пробовал так, в дэбаггере выдаёт ошибку кода и скрипт не запускается вовсе.

Igor_Komarov 22.02.2012 00:40

Проблема крылась в тривиальных вещах...
Скрипт в финале требовал оформления переменной как текстовой, т.е. верная её вставка '"+url+"' (дополнительные кавычки). Кроме этого, подгрузка изображения индикации загрузки в место изменяемого слоя, на время асинхронного получения данных (переменная use) оказалась капризной к кавычкам любого рода. Поэтому пришлось все их выбросить, где то так
use="<div align=center><img src=images/loading.gif border=0 /></div>";

Эти манипуляции позволили запустить сценарий.
Спасибо за помощь.

cmygeHm 22.02.2012 12:04

Ну вот! Прокачались :) Поздравления! :write:

cmygeHm 22.02.2012 12:06

Кавычки все же лучше обработать например escape'ом


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