【发布时间】:2012-12-06 17:15:05
【问题描述】:
考虑一个带有 2 个提交按钮的简单表单
<form method="post">
<button type="submit" name="command" value="cancel">Cancel Order</button>
<button type="submit" name="command" value="proceed">Save Order</button>
</form>
一旦提交,服务器将通过检查command 的值来知道使用哪个提交按钮来提交表单。太好了!
在这种情况下,我使用表单的onsubmit 事件处理程序来预处理并通过 AJAX 发送表单数据。像这样:<form method="post" onsubmit="return ajaxSubmit(this);">
我使用这个ajaxSubmit 函数作为检查任何提供的表单元素并改为通过Ajax 发送数据的通用方法。这可以很好地确定文本字段的值,如果复选框被“选中”,在组中选择了哪个收音机等等。它似乎唯一出错的事情(因为我不确定如何检查这个)是哪个提交按钮用于提交表单。即myForm["command"] 中没有任何内容可以说明实际使用了 2 个命令按钮中的哪一个。
相反,有没有办法访问服务器在发送之前使用 JavaScript 接收的相同“发布”数据?
否则,这只是我需要解决的缺陷吗?最好的方法是什么?
编辑: 由于所有现代浏览器都会传递用于提交表单的按钮的名称/值(以及其他相关部分,例如从组中选择哪个选项、选中的复选框名称/值等),任何人都可以解释为什么没有在发送到服务器之前直接访问这些数据的方法?我们不能这样做有什么原因吗?
【问题讨论】:
-
也许我理解错了,但是如果你使用 AJAX 将表单数据发送到服务器,为什么要使用 'post' 呢?另外,要确定按下了哪个提交按钮,您不能只提供 ID 属性并将它们传递给 AJAX 例程吗?
-
Ajax 例程是一个名为“ajaxSubmit”的通用函数,它接受一个表示 HTML 表单标签及其元素的 JavaScript“表单”对象。在许多情况下,我使用它来用 Ajax 代替常规的表单提交(和页面刷新)。我喜欢我可以通过 post 提交 Ajax 并期望在服务器端获得相同的结果。
-
请注意,如果您使用
button而不是input type="submit",旧版本的 IE 将发送所有按钮值,而不仅仅是您单击的那个。
标签: javascript html ajax