原生javascript如何实现共享onload事件


Posted in Javascript onJuly 03, 2020

在工作时,我们给一个元素绑定了事件,如果dom还没加载完成,就执行了js代码,就不会绑定成功。常规解决方案就是用:

window.onload = EventFunction;

可是如果有两个 事件,

  • window.onload = EventFunction1;
  • window.onload = EventFunction2;

那2就会将1取代,这时你可能会想:每个事件处理板书只能绑定一条指令。有一种办法可以让我们避开这一难题:可以先创建一个匿名函数来容纳这两个函数,然后把那个匿名函数绑定到onload事件上,如下所示:

window.onload = function(){
 firstFunction();
 secondFunction(); 
}

它确实能很好地工作————在需要绑定的函数不是很多的场合,这应该是最简单的解决方案了。

这里还有一个弹性最佳的解决方案——不管你打算页面加载完毕时执行多少个函数,它都可以应付自如。这个方案需要额外编写一些代码,把函数绑定到window.onload事件就非常易行了。

这个函数的名字是addLoadEvent,它是由Simon Willison写的。它只有一个参数:打算在页面加载完毕时执行的函数的名字。

下面是此函数要完成的操作:

1.把现有的 window.onload 事件处理函数的值存入变量 oldonload;

2.如果在这个处理函数上还没有绑定任何函数,就像平时那样把新函数添加给它;

3.如果在这个处理函数上已经绑定了一些函数,就把新函数追加到现有指令的末尾。

function addLoadEvent(func) {
    var oldonload = window.onload;
    if(typeof window.onload != 'function'){
      window.onload = func;
    }else{
      window.onload = function(){
        oldonload();
        func();
      }
    }
  }

这将把那些在页面加载完毕时执行的函数创建为一个队列。如果想把刚才那两个函数添加到队列里去,只需要写出以下代码就行了:

addLoadEvent(firstFunction);
addLoadEvent(secondFunction);

我发现这个函数非常实用,尤其是在代码变得越来越复杂的时候。无论打算在页面加载完毕时执行多少个函数,只要定一条语句就可以安排好一切。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript getElementsByTagName
Jan 31 Javascript
使用Json比用string返回数据更友好,也更面向对象一些
Sep 13 Javascript
JavaScript根据数据生成百分比图和柱状图的实例代码
Jul 14 Javascript
jquery滚动条插件jScrollPane的使用介绍
Nov 08 Javascript
node.js中的events.emitter.once方法使用说明
Dec 10 Javascript
js获取元素外链样式的方法
Jan 27 Javascript
jQuery事件用法详解
Oct 06 Javascript
js实现下拉框效果(select)
Mar 28 Javascript
基于JavaScript实现图片连播和联级菜单实例代码
Jul 28 Javascript
vue-cli安装使用流程步骤详解
Nov 08 Javascript
js中arguments对象的深入理解
May 14 Javascript
vue使用代理解决请求跨域问题详解
Jul 24 Javascript
Vue如何实现监听组件原生事件
Jul 03 #Javascript
如何在node环境实现“get数据解析”代码实例
Jul 03 #Javascript
JavaScrip如果基于url实现图片下载
Jul 03 #Javascript
基于VUE实现判断设备是PC还是移动端
Jul 03 #Javascript
JavaScript如何判断对象有某属性
Jul 03 #Javascript
详解element-ui动态限定的日期范围选择器代码片段
Jul 03 #Javascript
JS常见错误(Error)及处理方案详解
Jul 02 #Javascript
You might like
风味层面去分析咖啡油脂
2021/03/03 咖啡文化
一些 PHP 管理系统程序中的后门
2009/08/05 PHP
使用php来实现网络服务
2009/09/15 PHP
学习php过程中的一些注意点的总结
2013/10/25 PHP
php多种形式发送邮件(mail qmail邮件系统 phpmailer类)
2014/01/22 PHP
thinkphp表单上传文件并将文件路径保存到数据库中
2016/07/28 PHP
浅谈PHP中pack、unpack的详细用法
2018/03/12 PHP
基于jquery的返回顶部效果(兼容IE6)
2011/01/17 Javascript
javascript学习笔记(十八) 获得页面中的元素代码
2012/06/20 Javascript
关于js new Date() 出现NaN 的分析
2012/10/23 Javascript
Node.js中使用事件发射器模式实现事件绑定详解
2014/08/15 Javascript
Jquery异步提交表单代码分享
2015/03/26 Javascript
开启BootStrap学习之旅
2016/05/04 Javascript
使用jQuery制作Web页面遮罩层插件的实例教程
2016/05/26 Javascript
移动开发之自适应手机屏幕宽度
2016/11/23 Javascript
easyui datebox 时间限制,datebox开始时间限制结束时间,datebox截止日期比起始日期大的实现代码
2017/01/12 Javascript
angularjs中的$eval方法详解
2017/04/24 Javascript
es6中比较有用的7个技巧小结
2019/07/12 Javascript
vue 使用rules对表单字段进行校验的步骤
2020/12/25 Vue.js
[52:31]VP vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
python共享引用(多个变量引用)示例代码
2013/12/04 Python
python利用datetime模块计算时间差
2015/08/04 Python
Python随手笔记第一篇(2)之初识列表和元组
2016/01/23 Python
python 自定义装饰器实例详解
2019/07/20 Python
Python线程条件变量Condition原理解析
2020/01/20 Python
Python读入mnist二进制图像文件并显示实例
2020/04/24 Python
CSS3中的5个有趣的新技术
2009/04/02 HTML / CSS
adidas瑞典官方网站:购买阿迪达斯鞋子和运动服
2019/12/11 全球购物
英文版餐饮业求职信
2013/10/18 职场文书
毕业生的自我鉴定
2013/10/29 职场文书
给实习单位的感谢信
2014/02/01 职场文书
校车安全责任书
2014/08/25 职场文书
个人四风问题原因分析及整改措施
2014/09/28 职场文书
2014年采购工作总结
2014/11/20 职场文书
2015年度党员自我评价范文
2015/03/03 职场文书
巴黎圣母院读书笔记
2015/06/26 职场文书