HTML表单提交POSTS输入按钮/提交值; JavaScript表单提交没有

时间:2016-07-29 18:44:31

标签: javascript html forms submit form-submit

所以这已经困扰了我一段时间了。我发现了一个间歇性地两次提交表单内容的页面。为简化起见,输入是文本字段和按钮。在进一步检查后,我注意到一个表单提交包括文本和按钮输入,另一个提交仅发送文本输入。

我设置了一个测试页面来排除故障。我把它放在jsfiddle上,但我不认为这会有很大的帮助,因为我看不到使用像Fiddler这样的HTTP代理工具传递的值。

https://jsfiddle.net/9xL5w9t2/

<form method="post" action="www.google.com" onsubmit="alert('form submitted');" id="form1" name="form1name">
<input type="submit" value="submit form" id="submitbtn1" name="submitbtn1name" />
<input type="text" id="text1" value="123" name="text1name" />
</form>

<form method="post" action="www.google.com" onsubmit="alert('form submitted');" id="form2" name="form2name">
<input type="button" value="submit form" onclick="alert('button clicked to submit form'); document.form2name.submit();" id="submitbtn2" name="submitbtn2name" />
<input type="text" id="text2" value="123" name="text2name" />
</form>

<form method="post" action="www.google.com" id="form3" name="form3name">
<input type="button" value="submit form" onclick="alert('button clicked to submit form'); document.form3name.submit();" id="submitbtn3" name="submitbtn3name" />
<input type="text" id="text3" value="123" name="text3name" />
</form>

<form method="post" action="www.google.com" onsubmit="alert('form submitted'); this.submit();" id="form4" name="form4name">
<input type="submit" value="submit form" id="submitbtn4" name="submitbtn4name" />
<input type="text" id="text4" value="123" name="text4name" />
</form>

表单1:提交文本和按钮

表格2:提交文字

表格3:提交文字

表格4:提交两次。 1)提交文本2)提交文本和按钮

从它的外观来看,使用HTML表单提交通过文本和按钮输入发送。但是使用JavaScript提交表单只会发送文本输入。没有按钮。

这种行为有什么解释?为什么JavaScript表单提交仅通过文本输入发送,而HTML表单提交通过文本和按钮输入发送?

这是设计的吗?如果是这样,原因是什么?似乎不一致,你的HTML解析器发送按钮值,但你的JS引擎没有。

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

表单1:提交文本和按钮 ..默认行为,使用输入类型提交 由于您已单击提交按钮,因此两个输入控件都已提交。 添加另一个提交按钮。您将看到只有分派提交的按钮才会包含在帖子数据中。

那么..原因是什么:这样你可以添加两个buttongs,例如“取消”并“保存”到使用相同名称的表单

表格2:提交文字 表格3:提交文本 ..两个解决方案看起来完全一样,输入类型按钮在这里不作为“提交输入字段”处理..你使用js提交。 按钮上没有任何操作,这就是为什么它不包括在内。 (如上所述)。

表格4:提交两次。 1)提交文本2)提交文本和按钮 您正在使用表单1中的输入类型提交..所以此表单以完全相同的方式提交。但是:表单上还有一个onsubmit处理程序,它使用js再次调用submit,这就是第二次提交的原因。 首先调用处理程序,因为提交将触发页面重新加载,执行事件的脚本在提交后将不会“存在”。

其他行为就像Fomr 2&amp; 3

如果您需要进一步解释,请告诉我。