Php Javascript将元素添加到表单函数不工作?

Php Javascript将元素添加到表单函数不工作?,php,javascript,html,Php,Javascript,Html,请容忍我这可能有点混乱 我有一个javascript,它在按下按钮时向表单添加(或删除)一个新的textarea+隐藏字段(表示增量)。代码如下: function addRowToTable() { var tbl = document.getElementById('convention'); var lastRow = tbl.rows.length; // if there's no header row in the table, then iteration = la

请容忍我这可能有点混乱

我有一个javascript,它在按下按钮时向表单添加(或删除)一个新的textarea+隐藏字段(表示增量)。代码如下:

function addRowToTable()
{ 

  var tbl = document.getElementById('convention');
  var lastRow = tbl.rows.length;
  // if there's no header row in the table, then iteration = lastRow + 1
  var iteration = lastRow;
  var row = tbl.insertRow(lastRow);



  // right cell
  var cellRight = row.insertCell(0);

  var el = document.createElement('textarea');
  el.rows = '2';
  el.cols = '80';
  el.name = 'conventionSkill' + iteration;
  el.size = 40;

    var el2 = document.createElement('input');
      el2.value = iteration;
  el2.type = 'hidden';
  el2.name = 'conventioni';



  el.onkeypress = keyPressTest;
  cellRight.appendChild(el);
    cellRight.appendChild(el2);


}

function removeRowFromTable()
{
  var tbl = document.getElementById('convention');
  var lastRow = tbl.rows.length;
  if (lastRow > 2) tbl.deleteRow(lastRow - 1);
}
这将附加到通过以下代码呈现的表单中:

//Convention




 echo "<form action='index.php?viewrubric=".$_GET['viewrubric']."&class=".$_GET['class']."' method='POST'>";
echo "<input type='hidden' name='rubricid' value='".$id."' />";
$sql2 = "select * from rubrics_convention where rubricid = '$id'";
$result2 = mysql_query($sql2) or die (mysql_error());

?>
<h3>Habit of Convention</h3>
<table>
<tr><td>
<label>Habit Description: </td></tr></label></table><textarea name='conventionDescription' rows='2' cols='80'><? echo $description; ?></textarea><br />

<table id="convention">
<tr><td><label>Skill Descriptions: </label>
</td></tr>

<?
while($row2=mysql_fetch_array($result2)) {
$convention_i++;
echo "<tr><td><textarea ".$readonly." name='convention_".$row2['id']."' rows='2' cols='80'>".$row2['skill']."</textarea></td></tr>";
}
echo "<input type='hidden' value=".$convention_i." name='conventioni' />";


echo "</table>";
echo '<input type="button" value="Add" onClick="addRowToTable();" />
<input type="button" value="Remove" onClick="removeRowFromTable();" />
';
输出3,而不是4,即使在通过javascript添加新表单元素之后

当我在点击“添加”按钮后在Firefox中执行“查看选择源”时,以下是输出:

  <input value="3" name="conventioni" type="hidden" />

  <table id="convention">
    <tbody>
      <tr>
        <td><label>Skill Descriptions:</label></td>
      </tr>

      <tr>
        <td>
        <textarea name="convention_1" rows="2" cols="80">
habit 1
</textarea></td>
      </tr>

      <tr>
        <td>
        <textarea name="convention_2" rows="2" cols="80">
habit 2
</textarea></td>
      </tr>

      <tr>
        <td>
        <textarea name="convention_3" rows="2" cols="80">
testest
</textarea></td>
      </tr>

      <tr>
        <td>
        <textarea name="conventionSkill4" cols="80" rows="2">
</textarea><input name="conventioni" value="4" type="hidden" /></td>
      </tr>
    </tbody>
  </table>


    <input value="Add" onclick="addRowToTable();" type="button" /> <input value="Remove"
    onclick="removeRowFromTable();" type="button" />

技能描述:
习惯1
习惯2
测试员
根据这个输出,您可以清楚地看到它看到了新的conventioni值(初始值为3,javascript插入了一个值为4的新值)。但是,在提交表单时,它会完全忽略该新值,而是查看3。它甚至不承认公约的存在


有什么想法吗?谢谢

通过查看最终源,您有两个名为“conventioni”的输入

 <input value="3" name="conventioni" type="hidden" />

在我看来,每次添加一行时,似乎都在创建一个新的“约定”,而不是简单地更新已有输入的值。结果是,您的服务器将获得多个名为“conventioni”的参数。

您没有发布处理表单的php代码,因此我们无法帮助您。但是如果让我猜一猜,它不是在寻找conventionSkill4,因为您没有添加代码来寻找它。我测试的处理表单的唯一代码是是否按下了更新按钮(在表单末尾),我让它回显$_POST['conventioni']。这样做呼应的是3,而不是4,这是我面临的问题。我已经更新了我原来的帖子。好吧,你仍然需要发布你正在使用的代码,让我们看看你哪里出了问题。我的意思是我可以假设“约定”是指“约定”。$I和$I是一个计数器,然后我可以假设$I是在for(…)循环中使用的一个计数器变量,它只计算到3而不是4,但这只是在做假设,因为你没有发布代码。基本上,所有的东西都在那里。conventioni是一个隐藏的输入字段,其值由javascript根据迭代定义。您可以在html输出中看到conventioni是4,应该是4。但是,在提交表单时,conventioni被读取为3,这是定义的第一个变量(在按下add按钮之前)。就好像从来没有按过按钮。谢谢你的回复。我更改了javascript,添加了一个新的隐藏输入字段conventioni_alt。下面是输出:但是,在提交表单后尝试回显$\u POST['conventioni_alt']时,它仍然无法识别提交。您应该使用类似Firefox的插件来检查传出HTTP请求的外观。如果参数在那里设置正确,那么您就知道问题出在服务器上。我只是尝试使用TamperData,它甚至没有看到添加的javascript输入字段。这意味着什么?这可能意味着它们没有被正确地添加到DOM中。添加行之后,您应该能够使用调试器来检查DOM的外观,并检查输入是否确实存在,是否确实在
块中。我不确定这意味着什么,但我在另一个表单上使用了此脚本,并且TamperData完美地拾取了它。你能指导我如何检查出了什么问题吗?我使用了firebug,它在为响应添加新元素时可以很好地读取HTML。我只是回应了另一个建议,基本上说了同样的话。由于我不太确定更新代码是什么,我只是更改了javascript以添加一个名为conventioni_alt的字段,但是它仍然没有检测到它。
 <input value="3" name="conventioni" type="hidden" />
<input name="conventioni" value="4" type="hidden" />
element = document.getElementById('conventioni');
element.value = new_value;