JavaScript 注册事件代码


Posted in Javascript onJanuary 27, 2011

首先是最常规的方法:
程序代码

<p id="para" title="cssrain demo!" onclick="test()" >test</p> 
<script> 
function test(){ 
alert("test"); 
} 
</script>

当某一天,我们知道JavaScript要跟HTML结构实现分离后,就会改了一种写法:
程序代码
<p id="para" title="cssrain demo!">test</p> 
<script> 
function test(){ 
alert("test"); 
} 
window.onload = function(){ 
document.getElementById("para").onclick = test; 
} 
</script>

当我们工作越来越久后,有时候我们需要对某个元素绑定多个相同的事件类型:
程序代码
<p id="para" title="cssrain demo!">test</p> 
<script> 
function test(){ 
alert("test"); 
} 
function pig(){ 
alert("pig"); 
} 
window.onload = function(){ 
document.getElementById("para").onclick = test; 
document.getElementById("para").onclick = pig; 
} 
</script>

如果按照上面的写法,我们只能输出第二个函数。
这时候我们需要用到attachEvent方法:
程序代码
<p id="para" title="cssrain demo!">test</p> 
<script> 
function test(){ 
alert("test"); 
} 
function pig(){ 
alert("pig"); 
} 
window.onload = function(){ 
document.getElementById("para").attachEvent("onclick",test); 
document.getElementById("para").attachEvent("onclick",pig); 
} 
</script>

在一段时间内,你并没发现这段代码有任何错误。
某一天,一个名叫firefox的浏览器 闯入你的视野,当我们把这段代码放到firefox中执行后,
发现并不能正常运行。 问题就这样,越来越多,然而作为一名JS程序员,这些都是必须面对的。
为了解决这段代码的平台兼容性问题,我翻翻手册,知道了firefox跟ie的区别:
firefox中注册事件使用:addEventListener方法,同时为了兼容ie,我们必须用到if ... else...
程序代码
<p id="para" title="cssrain demo!">test</p> 
<script> 
function test(){ 
alert("test"); 
} 
function pig(){ 
alert("pig"); 
} 
window.onload = function(){ 
var element = document.getElementById("para"); 
if(element.addEventListener){ // firefox , w3c 
element.addEventListener("click",test,false); 
element.addEventListener("click",pig,false); 
} else { // ie 
element.attachEvent("onclick",test); 
element.attachEvent("onclick",pig); 
} 
} 
</script>

此时,代码就可以在多个平台上工作了。
但随着水平的进步,你不满足每次都去判断,你想把这个判断封装起来,以后可以直接调用:
程序代码
<p id="para" title="cssrain demo!">test</p> 
<script> 
function test(){ 
alert("test"); 
} 
function pig(){ 
alert("pig"); 
} 
function addListener(element,e,fn){ 
if(element.addEventListener){ 
element.addEventListener(e,fn,false); 
} else { 
element.attachEvent("on" + e,fn); 
} 
} 
window.onload = function(){ 
var element = document.getElementById("para"); 
addListener(element,"click",test); 
addListener(element,"click",pig); 
} 
</script>

至此,作为一个程序员的工作就完了。
中间我们从一个最传统,最基本的写法 , 然后实现Js和HTML的分离,然后又实现对同一个元素注册多个事件,期间,我们发现注册事件的兼容性问题。最后我们对注册事件的方法进行封装,方便以后使用。
Javascript 相关文章推荐
5个可以帮你理解JavaScript核心闭包和作用域的小例子
Oct 08 Javascript
js判断当前页面在移动设备还是在PC端中打开
Jan 06 Javascript
深入浅析Bootstrap列表组组件
May 03 Javascript
jquery弹出框插件jquery.ui.dialog用法分析
Aug 20 Javascript
浅谈jQuery中Ajax事件beforesend及各参数含义
Dec 03 Javascript
几行js代码实现自适应
Feb 24 Javascript
ES6使用Set数据结构实现数组的交集、并集、差集功能示例
Oct 31 Javascript
bootstrap 点击空白处popover弹出框隐藏实例
Jan 24 Javascript
原生JS实现的雪花飘落动画效果
May 03 Javascript
Vue中在新窗口打开页面及Vue-router的使用
Jun 13 Javascript
JavaScript设计模式之建造者模式实例教程
Jul 02 Javascript
vue移动端弹框组件的实例
Sep 25 Javascript
Iframe自适应高度绝对好使的代码 兼容IE,遨游,火狐
Jan 27 #Javascript
EXT窗口Window及对话框MessageBox
Jan 27 #Javascript
基于jquery的表头固定的若干方法
Jan 27 #Javascript
jquery animate图片模向滑动示例代码
Jan 26 #Javascript
jQuery 幻灯片插件(带缩略图功能)
Jan 24 #Javascript
jquery lazyload延迟加载技术的实现原理分析
Jan 24 #Javascript
11款新鲜的jQuery插件[附所有demo下载]
Jan 24 #Javascript
You might like
php的正则处理函数总结分析
2008/06/20 PHP
PHP CURL 内存泄露问题解决方法
2015/02/12 PHP
PHP访问数据库集群的方法小结
2016/03/14 PHP
PHP中让json_encode不自动转义斜杠“/”的方法
2017/02/28 PHP
通过Unicode转义序列来加密,按你说的可以算是混淆吧
2007/05/06 Javascript
Javascript面向对象编程(三) 非构造函数的继承
2011/08/28 Javascript
在jQuery ajax中按钮button和submit的区别分析
2012/10/07 Javascript
ExtJS判断IE浏览器类型的方法
2014/02/10 Javascript
IE浏览器中图片onload事件无效的解决方法
2014/04/29 Javascript
javascript带回调函数的异步脚本载入方法实例分析
2015/07/02 Javascript
js实现匹配时换色的输入提示特效代码
2015/08/17 Javascript
深入浅析AngularJS和DataModel
2016/02/16 Javascript
理解javascript定时器中的单线程
2016/02/23 Javascript
jQuery实现验证年龄简单思路
2016/02/24 Javascript
js+css实现select的美化效果
2016/03/24 Javascript
Vuejs第九篇之组件作用域及props数据传递实例详解
2016/09/05 Javascript
JavaScript对象引用与赋值实例详解
2017/03/15 Javascript
前端axios下载excel文件(二进制)的处理方法
2018/07/31 Javascript
JS/HTML5游戏常用算法之追踪算法实例详解
2018/12/12 Javascript
vue引入静态js文件的方法
2020/06/20 Javascript
python根据京东商品url获取产品价格
2015/08/09 Python
python机器学习之神经网络(三)
2017/12/20 Python
Python判断对象是否相等及eq函数的讲解
2019/02/25 Python
Python re 模块findall() 函数返回值展现方式解析
2019/08/09 Python
python将logging模块封装成单独模块并实现动态切换Level方式
2020/05/12 Python
Python基于smtplib模块发送邮件代码实例
2020/05/29 Python
纯CSS3实现表单验证效果(非常不错)
2017/01/18 HTML / CSS
Orvis官网:自1856年以来,优质服装、飞钓装备等
2018/12/17 全球购物
地理科学专业自荐信
2014/09/01 职场文书
2014年社区综治工作总结
2014/11/17 职场文书
2015年安全教育月活动总结
2015/03/26 职场文书
nginx实现发布静态资源的方法
2021/03/31 Servers
nginx处理http请求实现过程解析
2021/03/31 Servers
pytorch中Schedule与warmup_steps的用法说明
2021/05/24 Python
java设计模式--七大原则详解
2021/07/21 Java/Android
win11如何查看端口是否被占用? Win11查看端口是否占用的技巧
2022/04/05 数码科技