You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何添加event.preventDefault()后,提交jQuery UI对话框表单仍刷新页面?

关于jQuery UI对话框表单提交页面刷新的问题解答

问题1:为啥提交jQuery UI对话框里的表单时页面会刷新?

嘿,这其实是浏览器表单的默认行为在搞鬼!不管表单是放在普通页面里还是jQuery UI的模态对话框中,只要触发了表单提交(比如点提交按钮、按回车),浏览器就会默认跳转到表单action属性指定的地址——如果没设置action,就会直接刷新当前页面。对话框只是把表单渲染成了模态层,根本没改变表单本身的提交逻辑,所以页面该刷新还是会刷新~

问题2:加了event.preventDefault()还是刷新?来看看你的代码问题

我仔细看了你贴的代码,问题出在这几个关键地方:

  • 没把event作为回调参数传入:你写的是function() { ... },然后直接在里面用event.preventDefault(),但这个event变量根本没定义啊!除非全局刚好有个同名变量,不然这行代码等于白写,完全没起到阻止默认行为的作用。
  • success回调里的event.preventDefault()纯纯多余:等AJAX请求成功的时候,表单早就已经触发默认提交了,这时候再调用阻止默认行为,啥用都没有。
  • 另外,重复选择$('#createGroupPopup > form')有点啰嗦,直接用$(this)指代当前触发提交事件的表单就行,代码更简洁还高效。

给你改好的代码:

$('#createGroupPopup > form').submit(function(event) { 
    // 必须把event作为参数传进回调函数里
    event.preventDefault(); 
    $.ajax({ 
        type: "POST", 
        url: "form.php?action=group_create", 
        data: $(this).serialize(), // 用$(this)获取当前表单数据,更简洁
        success: function() { 
            $('#createGroupPopup').dialog("close"); 
        } 
    }); 
})

额外提个醒:

如果你的提交按钮是<button>标签,要确认它的type是submit(默认就是,除非你改成了button);要是你是用普通按钮(比如<button type="button">)点击后手动调用form.submit(),那submit事件里的阻止默认行为可能不生效,这时候得在按钮的点击事件里直接阻止默认,再发起AJAX请求哦。


内容的提问来源于stack exchange,提问作者DispléNam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 20:27:56