Передача переменных
Столкнулся с проблемой, решить которую никак не удаётся. Суть проблемы в следующем
В 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, время: 01:11. |