Передача переменных
Столкнулся с проблемой, решить которую никак не удаётся. Суть проблемы в следующем
В 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 передаваемые в функцию переменные (выше отображена только часть функции). Я понимаю что в указаной прорисовке переменные видятся скриптом как текст, но все мои попытки изменить ситуацию пока что безрезультатны. |
на всякий случай приведу тело функции целиком:
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 они не видны (это и понятно, они видятся ей простой строкой). |
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>";
|
Пробовал так, в дэбаггере выдаёт ошибку кода и скрипт не запускается вовсе.
|
Проблема крылась в тривиальных вещах...
Скрипт в финале требовал оформления переменной как текстовой, т.е. верная её вставка '"+url+"' (дополнительные кавычки). Кроме этого, подгрузка изображения индикации загрузки в место изменяемого слоя, на время асинхронного получения данных (переменная use) оказалась капризной к кавычкам любого рода. Поэтому пришлось все их выбросить, где то так use="<div align=center><img src=images/loading.gif border=0 /></div>"; Эти манипуляции позволили запустить сценарий. Спасибо за помощь. |
Ну вот! Прокачались :) Поздравления! :write:
|
Кавычки все же лучше обработать например escape'ом
|
| Часовой пояс GMT +3, время: 06:44. |