【问题标题】:Change a form value before submitting via JavaScript在通过 JavaScript 提交之前更改表单值
【发布时间】:2012-09-18 21:13:02
【问题描述】:

我在类似问题上遇到了很多问题,但似乎无法使其正常工作。我想要做的是当单击按钮时,将表单字段的值替换为“现在”一词,然后提交表单。最初,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();
}

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

在后台,有一个 PHP 脚本生成 HTML 并接受提交的输入,因此有一些奇怪的 ID。如果我遗漏了任何内容,可以在这里看到整个页面http://ad7zj.net/logging/index.php,我将不胜感激!

【问题讨论】:

  • 谨慎使用此方法 - 如果浏览器未启用 JavaScript,您可能会在服务器上返回错误值。正如 Jeremy 下面所说,请考虑从服务器获取时间。

标签: javascript html forms


【解决方案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.

【讨论】:

  • 嗯,这基本上就是提交“现在”所做的 - 它指示 PHP 脚本输入当前时间(当然是服务器时间)。使用 onsubmit() 的问题是提交表单有两种不同的方式(通过单击起飞字段中的按钮或单击末尾的“更新...”按钮)。只有第一个按钮应该在字段中插入“现在”。如果我理解正确,onsubmit() 不会因为 any 提交表单而触发吗?
  • 啊..误解了这个问题。我的印象是,无论表单是如何提交的,您都希望更改该值。我稍后会更新我的答案。
  • 漂亮!!这就是诀窍......我实际上必须使用 getElementById() 因为在完整的应用程序中,可以有多个行都具有相同的名称。不过,您的原则适用,我将避免使用 innerHTML 更新内容。非常感谢!!
猜你喜欢
  • 1970-01-01
  • 2021-09-06
  • 2018-04-28
  • 2012-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多