window unload和beforeunload事件

jQuery 的 unload()失效
我想实现当关闭当前选项卡的时候,弹出一个小框.但是其却不工作.
$(window).unload(function() {
alert('bye');
});

之后我又用
window.onbeforeunload = function(){alert('bye')}

依然不行.求解.


共收到 8 条回复
17bca47a4961a24f82ef972aa9e1c986
doitian 1楼, 9月前 喜欢

你需要使用beforeunload,但是只能返回个字符串让浏览器显示提示框, 返回null,undefine就直接关闭了。

$(window).bind('beforeunload', function (e) {
    if (app.shouldSave()) {
        return 'You have unsaved changes';
    }
}) 
941056da1db23b2c0081e9c8d9416574
hlcfan 2楼, 9月前 喜欢

@doitian 你好,大牛,我试了你这个方法.但是每次刷新的时候也会弹出来...大牛,为什么我写的方法不对呢?

941056da1db23b2c0081e9c8d9416574
hlcfan 3楼, 9月前 喜欢

@doitian 我查了下,是浏览器差异,ff就正确.

17bca47a4961a24f82ef972aa9e1c986
doitian 4楼, 9月前 喜欢

unload 和 beforeunload 都没法区分刷新和关闭,只要当前页面unload了就会触发(关闭,刷新,点击链接,输入地址等等)

unload 可以做些清理工作,但是不能用preventDefault来阻止页面关闭。(jquery unload )

alert实际执行了,只是大部分浏览器会阻止正在关闭的窗口弹对话框。如果你用chrome,可以打开Developer Tool并点击右下角的齿轮设置,选择 Preserve log upon navigation,可以查看到unload里的console.log。因为unload一返回,页面就关闭,如果有ajax请求什么的,都一定要同步调用(async:true),不然页面unload完资源就全部注销了。

beforeunload 如果返回值不是null或者undefined,浏览器会负责跳出个confirm对话框,返回值可以会做为提示的一部份也可能压根就不用。

17bca47a4961a24f82ef972aa9e1c986
doitian 5楼, 9月前 喜欢

唯一能阻止页面关闭的就是beforeunload返回truthy value,并且用户点击了Cancel/No

941056da1db23b2c0081e9c8d9416574
hlcfan 6楼, 9月前 喜欢

#5楼 @doitian 大牛,你好.我在 action 里写
render :js => "window.close();"
为什么窗口关不掉呢?

941056da1db23b2c0081e9c8d9416574
hlcfan 7楼, 8月前 喜欢

#5楼 @doitian 你好,onbeforeunload 这个方法只能执行 return 吗,我可以在里边写$.get(url)
之类的语句吗?

17bca47a4961a24f82ef972aa9e1c986
doitian 8楼, 8月前 喜欢

#7楼 @hlcfan AJAX的话要同步,不然这个函数返回AJAX直接被cancel了.

$.get({url:url, async: false}) 
原文地址

http://ruby-china.org/topics/2181

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值