2012-09-18 48 views
1

我在类似的问题上经历了很多问题,但似乎无法得到此工作。我想要做的是当单击按钮时,用单词“now”替换表单域的值,然后提交表单。最初,HTML形式如下:在通过JavaScript提交之前更改表单值

<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> 

JavaScript时通过的onclick触发如下图所示:

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我很感激帮助!

+0

小心使用这种方法 - 如果浏览器不支持JavaScript,你可以得到坏值回服务器上。正如Jeremy在下面所说的,考虑从服务器获取时间,而不是。 –

回答

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. 
+0

那么,基本上这就是'现在'提交的内容 - 它指示PHP脚本输入当前时间(这当然是服务器时间)。使用onsubmit()的问题有两种不同的方式可以提交表单(通过单击起飞字段中的按钮或单击最后的“更新...”按钮)。只有第一个按钮应该在现场插入'now'。如果我理解正确,不会onsubmit()激发任何*提交表单? – ad7zj

+0

啊..误解了这个问题。无论表单是如何提交的,我都希望能够改变价值。我马上更新我的答案。 –

+0

美丽!这是个诀窍......我实际上必须使用getElementById(),因为在完整的应用程序中,可以有多个行都具有相同的名称。尽管您的原则适用,但我会避免使用innerHTML更新内容。非常感谢!! – ad7zj