onbeforeunload事件两种写法及效果

在符合W3C标准的浏览器里,可以使用addEventListener方法来添加事件。

当不需要为一个事件添加多个处理函数的时候,可以简单的使用onXXX=function(){}的方式来添加事件处理函数,但是当需要为同一事件添加多次处理函数(handler)时,就要用到addEventListener

一般也碰不到什么问题,然而今天在使用onbeforeunload的时候发现,两种方式有一点点区别,区别在于返回值的处理。

直接用

window.onbeforeunload=function(){return ‘确定要离开吗?‘}

这种方式,没有问题。刷新或者跳转都能给出正确提示,但是使用addEventListerner时,就没有用了,如下:

function a(){
return ‘要离开吗?‘;
}
window.addEventListener(‘beforeunload‘,a,true)

并没有任何效果,页面还是照样刷新或者离开了。在Google上查了一下,结果得到是这样的,应该使用event.returnValue来指明要提示的内容,代码修改完后如下:

function beforeUnloadHandler(event){
event.returnValue = "要离开吗?"
}
window.addEventListener(‘beforeunload‘,beforeUnloadHandler,true);

这样就可以了,并且根据标准,第一种方式,也应该使用event.returnValue的方式来给出提示。

可以参考这个文章:https://developer.mozilla.org/en-US/docs/Web/API/WindowEventHandlers/onbeforeunload

时间: 2024-08-02 22:25:53

onbeforeunload事件两种写法及效果的相关文章

iOS中表视图单元格事件用nib和storyboard的两种写法总结

从ios6开始,苹果公司推出了storyborad技术取代了nib的写法,这样代码量确实少写了很多,也比较简洁.但是,从学习的角度来说,阿堂认为 用nib的写法,虽然多了些代码,但是对于掌握知识和原理的角度来说,我认为nib写法也挺不错的.用storyborad的写法时,如果segue场景 较多的话,设置有问题的话,会导致一些异常的发生,增加调试的难度.下面阿堂亲自了测试了nib和storyboard的两种写法的demo.下面将其差 异之处简单对比了下,供有需掌握的网友了解下. demo效果图如

可拖动弹窗的JS和jQuery两种写法

最近在慕课网上学习了一个网页可拖动对话框js实现的演示视频,这个demo中的例子是百度首页登录按钮的弹窗,如下图: 当点击左上角的登录按钮时,弹窗出现并自动居中,同时窗口可拖动的范围被限制在了可视区域内,即浏览器视窗的上下左右边界,弹窗无法移出移动出四个边界,也不会出现滚动条. 另一个效果就是,当改变窗口大小时,对话框自动居中. 这个视频中用了原生js,jQuery两种写法实现案例,但本质上,对话框居中,限制拖动范围的的计算思路是一致的. 为了简化页面,总结核心思路,我重新写了一个小demo,界

状态机的两种写法

状态机的两种写法 发布时间: 2015-09-13 13:22  阅读: 1972 次  推荐: 3   [收藏] 有限状态机FSM思想广泛应用于硬件控制电路设计,也是软件上常用的一种处理方法(软件上称为FMM有限消息机).它把复杂的控制逻辑分解成有限个稳定状态,在每个状态上判断事件,变连续处理为离散数字处理,符合计算机的工作特点.同时,因为有限状态机具有有限个状态,所以可以在实际的工程上实现.但这并不意味着其只能进行有限次的处理,相反,有限状态机是闭环系统,有限无穷,可以用有限的状态,处理无穷

python3 开启多线程的两种写法

写法一 import time from threading import Thread def func(name): print(f"{name}开始") time.sleep(0.5) print(f"{name}结束") if __name__ == '__main__': t1 = Thread(target=func, args=("线程1",)) t2 = Thread(target=func, args=("线程2&qu

for循环的两种写法

教程 (https://tour.golang.org/methods/21) 里的 for 是这样写的: 其中 for 语句可以改写如下: for n, err := r.Read(b); err != io.EOF; n, err = r.Read(b) { fmt.Printf("n = %v err = %v b = %v\n", n, err, b) fmt.Printf("b[:n] = %q\n", b[:n]) } (当然,golang 里的 for

sql sever 的两种写法

事务(Transaction)是并发控制的单位,是用户定义的一个操作序列.这些操作要么都做,要么都不做,是一个不可分割的工作单位. 通过事务,SQL Server能将逻辑相关的一组操作绑定在一起,以便服务器保持数据的完整性. 在sql server+ .net 开发环境下,有两种方法能够完成事务的操作,保持数据库的数据完整性: 一个就是用sql存储过程,另一个就是在ADO.NET中一种简单的事务处理: 现在通过一个典型的银行转账的例子来说明一下这两个例子的用法 我们先来看看sql存储过程是如何来

angularJs中$q的两种写法

带缓存处理的两种写法 过程:点击button触发load()方法,请求数据成后显示到页面中.如果已经请求过则从缓存中读取. 在线浏览 写法1: function demo(){ if (demo.cache == undefined) { return $http.get('https://api.github.com/users/github') .success(function(data, status, headers){ demo.cache = data; return $q(fun

描述性编程的两种写法

对象库编程(ORP)是一个非常强大的功能,如果对象名字改变了,只需要进入对象库修改对象,脚本即可批量更新. 描述性编程(DP)不需要维护庞大的对象库,而需要维护庞大的代码,但是在某些情况下(比如对象不能添加到对象库)它很有用. 下面通过一个例子来学习如何进行描述性编程: 首先,我们录制一段在百度首页输入“abcde”,然后点击“百度一下”的代码: Browser("百度一下,你就知道").Page("百度一下,你就知道").WebEdit("wd"

case的两种写法

case 表达式 when case1 then value1,case 2 then value2,...else endcase 1  when 2 then 3 when 1 then 4 else 5 end如果要再这个基础上加条件的话,只能在他外面嵌套一个case了应为这个case的表达式已经锁定 case when 表达式=1 then value1 ,when 表达式=2 then value2 else value end第二种方式是把表达式写在里面.这样写的多这种方式的好处:当