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
的实例,添加html
form
,修改条目,然后发送它。那么这里的一切都在你的控制之下

编辑:根据您的编辑,您似乎有重新提交表单的问题。你可以这样处理

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();

 });