- 此问题在此处已有答案**:
How can I get the button that caused the submit from the form submit event?(22个答案)
Determine which element triggered a form submit event(3个答案)
九年前就关门了。
此帖子已在1年前编辑并提交审核,未能重新打开帖子:
原始关闭原因未解决
我有一个表单,有两个提交按钮和一些代码:
超文本:
<input type="submit" name="save" value="Save" />
<input type="submit" name="saveAndAdd" value="Save and add another" />
JavaScript语言:
form.onSubmit = function(evnt) {
// Do some asynchronous stuff, that will later on submit the form
return false;
}
当然,这两个提交按钮完成的是不同的事情,有没有办法在onSubmit
中找出哪个按钮被按下了,这样以后我就可以通过thatButton.click()
提交了?
理想情况下,我不想修改按钮的代码,只是有一个纯JavaScript插件,有这个行为。
我知道Firefox有evnt.explicitOriginalTarget
,但我找不到其他浏览器的任何东西。
8条答案
按热度按时间wnrlj8wa1#
jsfiddle表示相同
qhhrdooz2#
不在提交事件处理程序本身中,没有。
但是,您 * 可以 * 做的是向每个提交添加单击处理程序,它将通知提交处理程序哪个被单击了。
下面是一个完整的示例(为简洁起见,使用jQuery)
pxiryf3j3#
裸骨,但确认工作,例如:
zujrkrfu4#
上面所有的答案都很好,但是我稍微整理了一下。
这个解决方案会自动将按下的提交按钮的名称放入动作隐藏域,页面上的javascript和服务器代码都可以根据需要检查动作隐藏域的值。
该解决方案使用jquery自动应用于所有提交按钮。
然后在表单提交处理程序中编写如下代码。
tjvv9vkg5#
创建一个Javascript变量来引用单击的按钮。我们将其命名为 * buttonIndex *
现在,您可以访问该值。0表示单击了保存按钮,1表示单击了saveAndAdd按钮。
处理这个问题的方法是创建两个JS函数,分别处理这两个按钮。
首先,确保表单具有有效的ID。对于本例,我将ID设置为"myForm"
return(false)将阻止表单提交的实际处理,并调用自定义函数,稍后您可以在其中提交表单。
hgtggwj06#
操作员说他不想修改按钮的代码。这是我可以用其他答案作为指导得出的最不打扰的答案。它不需要额外的隐藏字段,允许您保持按钮代码不变(有时您无法访问生成它的内容),并从代码的任何地方提供您要查找的信息......哪个按钮用于提交表单。我还没有评估如果用户使用Enter键提交表单会发生什么情况,而不是点击。
然后你可以在任何需要检查的地方访问“initiator”变量。希望这能有所帮助。
~打屁股
9gm1akwq7#
我使用Ext,所以我最终这样做:
然后到了提交的时候我提交了
等等,你说,如果你不小心的话,这个会循环,所以onSubmit有时候必须返回true
6tr1vspr8#
为什么不循环输入,然后给每个输入添加onclick处理程序呢?
您不必在HTML中执行此操作,但可以为每个按钮添加一个处理程序,如下所示:
然后,你的函数可以根据你传递的值“做一些事情”: