【问题标题】:Trigger onbeforeunload if form is not submitted如果未提交表单,则触发 onbeforeunload
【发布时间】:2011-05-09 12:43:50
【问题描述】:

我有一个通过 PHP 提交的表单,其中包含 3 个提交操作:

  • 保存并继续
  • 保存并退出
  • 不保存退出

如果用户没有点击任何表单操作,我想触发“OnBeforeUnload”警报,以告知他们他们将离开页面,并且他们的更改可能不会被保存。

我尝试了以下代码,但似乎 unbeforeunload 在我的点击事件之前被触发。关于如何最好地实现这一目标的任何建议?

$buttonpressed = false;
$j(".Actions input").click(function(){
    $buttonpressed = true;                                  
});

if(!$buttonpressed){
    window.onbeforeunload = function(){
        return "Your changes may not be saved.";
    }
}

【问题讨论】:

    标签: javascript jquery onbeforeload


    【解决方案1】:

    您需要在处理程序内部进行检查,如下所示:

    window.onbeforeunload = function(){
        if(!$buttonpressed){
            return "Your changes may not be saved.";
        }
    }
    

    目前,当您的代码运行时它正在绑定window.onbeforeunload,因为$buttonpressed 在它运行时是false……它是否在以后更改并不重要,因为您已经绑定了处理程序。另一种方法是让它更简单一些,如下所示:

    window.onbeforeunload = function(){
        return "Your changes may not be saved.";
    }
    $j(".Actions input").click(function(){
        window.onbeforeunload = null;
    });
    

    这只是删除click 上的处理程序。处理其他提交情况的更合适的事件是附加到submit 事件,如下所示:

    $j(".myForm").submit(function(){
        window.onbeforeunload = null;
    });
    

    【讨论】:

    • 最后一个选项对我不起作用,onbeforeunload 在提交事件之前被调用。使用提交按钮上的 onClick 和一个变量来修复它。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-03
    • 1970-01-01
    • 2013-08-04
    • 2017-12-18
    • 2011-03-24
    • 1970-01-01
    相关资源
    最近更新 更多