为啥我的 FORM 在 Ajax 调用后被提交? [复制]

Posted

技术标签:

【中文标题】为啥我的 FORM 在 Ajax 调用后被提交? [复制]【英文标题】:Why does my FORM get submitted after an Ajax call? [duplicate]为什么我的 FORM 在 Ajax 调用后被提交? [复制] 【发布时间】:2017-11-15 14:03:22 【问题描述】:

我有以下几点:

<form id="form" action="xxx" method="get">
  <input type="checkbox" name="cb">
  <button onclick="update();">Update</button>
</form>

<script>
  function update() 
    var data = $("#form").serialize();
    $.ajax( 
      url: "/api/m/x",
      type: "post",
      data: data
      
     ).done(function(results,status) 
          alert(status);
       ).fail(function(error, status) 
          alert(status);
      );
   
</script>

当我单击“更新”按钮时,Ajax 调用被发送到 /api/m/x 并触发了其中一个警报。到目前为止,一切都很好。但是,在我关闭警报对话框后,表单已提交!浏览器发送到xxx?cb=on,例如,如果我勾选了复选框。

为什么会这样?我的表单没有 &lt;input type='submit'&gt; 元素。谁触发了表单的提交?

我尝试将return false; 添加到update 函数,但行为仍然相同。

【问题讨论】:

你的成功在哪里 那是done 对吧? 因为你没有做任何事情来阻止它被提交 试试 你有使用内联处理程序的原因吗?此外,您需要将处理程序视为 function()update() 的等效项,这应该会告诉您为什么 update 函数中的 return false; 不起作用。 【参考方案1】:

表单中的&lt;button&gt; 标记是提交按钮,除非您指定type=button return false 也应该在 onsubmit 事件上

<form id="form" action="xxx" method="get" onsubmit="return update();">

function update() 
...
    return false;

【讨论】:

【参考方案2】:

如果表单中有按钮,则单击此按钮时正在提交表单

试试这样:

<form onsubmit="update();return false;">

【讨论】:

以上是关于为啥我的 FORM 在 Ajax 调用后被提交? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

for循环提交ajax,为啥只有第一次能够提交,后面的循环都没有提交到后台,但是for执行完了?急急急!

Ajax提交form表单

为啥用ajax发送post请求时,需要设置请求头类型为application/x-www-form-urlencoded

为啥代码在 Ajax 中没有达到成功函数?

为啥我的 Ajax 发布请求在表单提交中被阻止?

jquery的ajax提交页面中涉及多个form的问题