Rails jQuery 的 unload () 失效

hlcfan · 2012年03月27日 · 最后由 doitian 回复于 2012年04月17日 · 18099 次阅读

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

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

依然不行。求解。

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

$(window).bind('beforeunload', function (e) { if (app.shouldSave()) { return 'You have unsaved changes'; } })

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

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

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

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

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

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

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

$.get({url:url, async: false})

需要 登录 后方可回复, 如果你还没有账号请 注册新账号