javascript - 如果未提交表单,则触发 onbeforeunload

标签 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.";
    }
}

最佳答案

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

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

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

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

关于javascript - 如果未提交表单,则触发 onbeforeunload,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4172671/

相关文章:

javascript - Ember transitionTo 路由模型钩子(Hook)未调用

javascript - 剥离表格内容

javascript - 如何将单击的 div 的类名作为参数传递给函数

javascript - 什么样的数据应该被缓存?

javascript - Chrome 扩展 - 在浏览器上加载 js 之前获取 Html DOM

events - EasyUI datagrid 发送不需要的请求

javascript - 如何访问指令中 ng-repeat 内的外部作用域

javascript - React 组件未渲染

javascript - jQuery 选择不包含类的元素