window unload和beforeunload事件

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

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

依然不行.求解.


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

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

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

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

hlcfan 3楼, 9月前 喜欢

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

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对话框,返回值可以会做为提示的一部份也可能压根就不用。

doitian 5楼, 9月前 喜欢

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

hlcfan 6楼, 9月前 喜欢

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

hlcfan 7楼, 8月前 喜欢

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

doitian 8楼, 8月前 喜欢

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

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

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

你可能感兴趣的:(window unload和beforeunload事件)