Javascript 使用jquery提交表单,jquery有多个提交按钮,而无需单击触发器?
想象一下:Javascript 使用jquery提交表单,jquery有多个提交按钮,而无需单击触发器?,javascript,jquery,forms,form-submit,Javascript,Jquery,Forms,Form Submit,想象一下: <form id="form"> <input type="text"> <button type="submit" name="submit1" value="1">something1</button> <button type="submit" name="submit2" value="2">something2</button> <button type="sub
<form id="form">
<input type="text">
<button type="submit" name="submit1" value="1">something1</button>
<button type="submit" name="submit2" value="2">something2</button>
<button type="submit" name="submit3" value="3">something3</button>
</form>
还有一种选择-使用,您可以创建
FormData
的实例,添加htmlform
,修改条目,然后发送它。那么这里的一切都在你的控制之下
编辑:根据您的编辑,您似乎有重新提交表单的问题。你可以这样处理
var form = document.querySelector('form');
form.addEventListener('submit', {
confirmed: false,
handleEvent: function (event) {
if (this.confirmed)
return;
event.preventDefault();
doconfirm((confirmed) => {
if (confirmed) {
this.confirmed = true;
form.submit();
}
})
}
}, false);
或者,您可以通过在验证后解开
submit
处理程序并再次提交来解决问题:$('form').off('submit').submit()
让我们一次解决一个问题
首先,当我编写$('#form').submit()
时,哪个submit值
被派去?第一个
提交表单时,具有名称
属性的所有表单元素都将向表单的操作
目标提交其值(即使该值为空字符串)。因此,在您的情况下,所有3个按钮都具有名称
属性,因此所有3个按钮都将提交其名称/值对
通常,我们不会在submit按钮上添加name
属性,因为我们只希望它触发submit,而不是将其实际用作数据容器。而且,在大多数情况下,我们通常只包含一个提交按钮
其次,我如何在没有点击触发器的情况下提交表单
具有我想要的值的事件?有可能吗?例如
使用2提交值提交表单
您可以使用:
$('#form').submit()
手动导致提交,但您需要有一个if()
语句,该语句具有确定哪个值适合提交的逻辑。您可以使用隐藏的表单字段来代替存储在按钮中的值,如下所示:
<form id="form">
<input type="text">
<input type="hidden" name="hidden" value="">
<button type="submit">something3</button>
</form>
我建议使用隐藏的输入标记来明确逻辑。正如@Scott Marcus所解释的,当表单发送到服务器时,将提交命名按钮的值。但是,在您的情况下,这不会有帮助,因为您希望在将其提交到服务器之前执行一些逻辑 问题是jQuery无法确定单击了哪个按钮,因为当您通过$.serialize()查看表单数据时,它不提供提交按钮值,并且在不使用click的情况下触发了$.submit()事件 因此,唯一的解决办法是处理3个按钮的
单击事件,并存储一些值,这些值在您提交表单之前被检查,如本答案所述:
示例:在$('#form').submit()上,如果您为按钮提供了不同的名称,则将发送所有提交值。我没有得到第二个问题。你能再解释一下吗?你说的“发送”是什么意思?jQuery.submit()
只是一个事件处理程序。只有事件传递给它,而不是表单。假设我想用第二个提交按钮提交表单。类似于按第二个提交按钮,但没有单击触发器。将发送哪个提交值?
默认提交按钮,按DOM顺序显示第一个提交值。现在你的第二个问题不清楚了,你为什么不直接触发点击事件呢?你有没有想出其他的办法?是的,看看我的答案。这对OP的要求不起作用。jQuery仍然无法识别选中了哪个提交按钮。@在我的示例中,Skelly只有一个提交按钮。你看过我的答案了吗?是的,OP有多个提交按钮。。你读过这个问题吗?我的回答指出OP的策略是错误的。OP从未说过他们必须有3个按钮。这篇文章的重点是如何获得提交的3个可能值中的一个。事实上,如果你读了我的答案,你会发现OP问了两个问题,我都回答了。真的吗??你读过标题了吗?“使用具有多个提交按钮的jquery提交表单…”
<form id="form">
<input type="text">
<input type="hidden" name="hidden" value="">
<button type="submit">something3</button>
</form>
$("#form").on("submit", function(evt){
// Stop the form submission process
evt.preventDefault();
// Logic that sets hidden input field to correct value:
if(condition1){
$("input[type=hidden]").attr("value", "1");
} else if(condition2) {
$("input[type=hidden]").attr("value","2");
} else {
$("input[type=hidden]").attr("value","3");
}
// Manually submit the form
$("#form").submit();
});