Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > Сабмит и динамический HTML


Автор: Darksquall 19.7.2007, 20:04
Такой вопрос, есть код заменяющий динамически по событию, DIV в теле HTML на <input...>, но несмотря на то что DIV находится в форме Form question при сабмите этот input не передается, хотя его можно увидить например так 
document.all.punkt подскажите как мне его запихнуть в форму или же передать в принимающий файл после сабмита?

Код

<script language="JavaScript" type="text/javascript">

function atransp_form()
{
if (document.all.vidtranspjd.value=="контейнер")
    {
    document.all.resultat17.innerHTML='<input name="punkt" type="text" SIZE="40" MAXLENGTH="150">';
    }
}

function check_form()
{
 if (document.all.vidtranspjd.value=="контейнер")
    {
      if (document.all.punkt.value != "")
        {K=0;}
        else
        {K=1;}
    }

  if (document.all.vidtranspjd.value=="контейнер" && K==1)
    {
       alert ("Заполните обязательные поля!");
       return false;
    }
    else
    {document.question.submit();}
  
}
</script>


Автор: SelenIT 19.7.2007, 20:15
Цитата(Darksquall @  19.7.2007,  20:04 Найти цитируемый пост)
...несмотря на то что DIV находится в форме Form question...


Darksquall, это Вы сами предположили или Вам браузер сказал (например, путем alert(document.forms['имя_формы'].innerHTML);)?

Скорее всего, у Вас где-то некорректная верстка - например, <form> между <tr> и чем-то (как во времена 4-го "нетшкафа") или что-нибудь в этом роде. Из-за этого в DOM-дереве форма может оказаться закрыта не там, где </form>, а где-то раньше...

И document.all - немодно и (в общем случае) некроссбраузерно. Стандартный вариант - document.getElementById.

Автор: Darksquall 19.7.2007, 20:56
С  разметкой все нормально, я имел вииду DIV внутри тегов формы, но сам input в форме не показывается почемуто, может его как то нужно специально туда добавлять?

вот пример со SPAN
Код

<script language="JavaScript" type="text/javascript">
function atransp_form()
{
if (document.all.vidtranspjd.value=="контейнер")
    {
    document.all.rt17.innerHTML='<input name="punkt" type="text" SIZE="40" MAXLENGTH="150">';
    }
}
</script>

<form action="index.php" name="question" method="post">
<table>
  <tr>
        <td><SPAN id=rt17></SPAN></td>
  </tr>
</table>
</form>


вот punkt даже нет в строке браузера если передавать через GET

Автор: SelenIT 19.7.2007, 23:47
Darksquall, у меня добавленное Вашей функцией поле нормально передается, и GET-ом, и POST-ом, и в FF2, и в IE6...

Автор: Darksquall 19.7.2007, 23:56
SelenIT, можете код показать? может у меня что с браузером.

Автор: SelenIT 20.7.2007, 00:08
Darksquall, код практически Ваш:
Код

<script language="JavaScript" type="text/javascript">
function atransp_form()
{
if (true)
    {
    document.all.rt17.innerHTML='<input id="i1" name="punkt" type="text" SIZE="40" MAXLENGTH="150">';
    }
}
</script>
<button onclick="atransp_form()">Добавить поле</button>
<form action="info.php" name="question" method="post">
<table>
  <tr>
        <td><SPAN id=rt17></SPAN></td>
  </tr>
</table>
<input type="submit">
</form>

Нажимаю кнопку, ввожу данные, жму Submit - все есть. В info.php проверяю переменные:
Код

<? phpinfo(32); ?>

Автор: Darksquall 20.7.2007, 00:18
Спасибо, сделал код минимальным и нашел ошибку, тот что я привел действительно работает, а тот что в оригинале слишком большой и у меня <form> оказался внутри таблицы. 

Автор: melnikaite 23.7.2007, 05:19
у меня похожая проблема
есть одно поле file
вызывая addline()  добавляется еще поле
по сабмиту ничего не отправляется и при добавлении нового поля file очищаются старые заполненые поля
как я понял из форумов это одна проблема и связана с корректностью верстки (например форма внутри таблицы, но у меня нет таблиц)
как же сделать что бы значения заполненных полей сохранялись?
Код

<body onLoad=addline();>
<form name=forma action=upload.php method=post enctype='multipart/form-data'>Send these files:<br>
<input type=submit value=отправить><br><span id=name>
<input type=hidden name=count value=-1></span>
</form>
</body>
<script language=javascript>
function addline()
{
    c=++document.getElementById('count').value;

    obj='userfile'+c+'';

    input='<input name='+obj+' type=file> <a onClick=addline()>+</a><br>';

    s=document.getElementById('name').innerHTML;

    document.getElementById('name').innerHTML=s+input;
    
    return false;
}
</script>

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)