如果未提交表单,则触发onb​​eforeunload

时间:2010-11-13 13:14:53

标签: javascript jquery onbeforeload

我有一个表单,通过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.";
    }
}

1 个答案:

答案 0 :(得分:18)

您需要在处理程序中执行检查,如下所示:

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