在通过JavaScript提交之前更改表单值

时间:2012-09-18 21:13:02

标签: javascript html forms

我在类似的问题上经历了很多问题,但似乎无法使其发挥作用。我想要做的是当单击一个按钮时,用单词'now'替换表单字段的值,然后提交表单。最初,HTML表单如下所示:

<tr id="row43" bgcolor="#FF0000">
<form id="form43" name="loggingUpdate" action="index.php" method="POST">
<td>PersonsName</td><td>SGS 1-26</td>
<td><input type="text" name="takeoff" id="takeoff43"/><a href='#' onclick='startTakeoff(43);return false;'><img alt='Start Now' src='brush_24.png' border='0'></a></td>
<td><input type="text" name="landing" /></td><td>0 Mins</td>
<td><input type="text" name="towHeight" /></td>
<td><input type="hidden" name="flightIndex" value="43"/><input type="submit" value="Update..." />  <a href=deleteEntry.php?flightIndex=43><img src="close_24.png" /></a></td>
</form></tr>

onclick触发的Javascript如下所示:

function startTakeoff(flightIndex) { 
    var flightForm = document.getElementById("form"+flightIndex);
    var flightRow = document.getElementById("row"+flightIndex);

    flightRow.cells[2].innerHTML = "<input type=\"text\" name=\"takeoff\" value=\"now\"><a href=\"#\" onclick=\"startTakeoff(43);return false;\"><img alt=\"Start Now\" src=\"brush_24.png\" border=\"0\"></a>";
    flightForm.submit();
}

因此,当单击按钮时,它应该用'now'替换单元格的值并提交表单。问题是它确实提交时,实际上没有提交更改后的值。如果我手动将某些内容添加到其他字段之一(例如towHeight)并单击按钮,则会成功提交。换句话说,单击按钮时,只有“起飞”字段才会被提交。我之前从未使用过Javascript,所以这对我来说似乎很奇怪。

在后台的方式中,有一个PHP脚本生成HTML并获取提交的输入,因此有一些奇怪的ID。这里可以看到整个页面,以防我遗漏任何东西http://ad7zj.net/logging/index.php我很感激帮助!

1 个答案:

答案 0 :(得分:1)

您正在寻找.onsubmit()事件。

那就是说,你可能最好从服务器那里抽出时间。它可以帮助您远离整个世界的时区,日光节省时间问题,以及那些时间设置不准确的计算机数量。

编辑:

好的,感谢您的评论,我想我知道发生了什么。

您正尝试使用.innerHTML更新表单。 .innerHTML是一个相当奇怪的野兽,充满了各种各样的心痛 - 屈服于它的诱惑。看起来浏览器在实际应用innerHTML更新之前等待Javascript事件结束。无论如何,这将是我的猜测。在最简单的更新之外,我避免了这件事。

核对此:

  flightRow.cells[2].innerHTML = "<input type=\"text\" name=\"takeoff\" value=\"now\"><a href=\"#\" onclick=\"startTakeoff(43);return false;\"><img alt=\"Start Now\" src=\"brush_24.png\" border=\"0\"></a>";

请改为尝试:

// Assuming only one form with one name 'takeoff'
var el = document.getElementsByName("takeoff")[0];
el.value = 'now';

// The rest of the updates shouldn't matter -- the form is being submitted, nothing should be seen.