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 相关文章推荐
使用JS 清空File控件的路径值
Jul 08 Javascript
JS如何将UTC格式时间转本地格式
Sep 04 Javascript
IE6-IE9中tbody的innerHTML不能赋值的解决方法
Sep 26 Javascript
JavaScript字符串对象substring方法入门实例(用于截取字符串)
Oct 17 Javascript
微信小程序 wx.request(object) API详解及实例代码
Sep 30 Javascript
老生常谈jquery id选择器和class选择器的区别
Feb 12 Javascript
JS中Object对象的原型概念基础
Jan 29 Javascript
微信小程序实现漂亮的弹窗效果
May 26 Javascript
JS实现textarea通过换行或者回车把多行数字分割成数组并且去掉数组中空的值
Oct 29 Javascript
深入浅析nuxt.js基于ssh的vue通用框架
May 21 Javascript
React中使用外部样式的3种方式(小结)
May 28 Javascript
详解使用WebPack搭建React开发环境
Aug 06 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
phpMyAdmin2.11.6安装配置方法
2008/08/24 PHP
火车采集器 免费版使出收费版本功能实现原理
2009/09/17 PHP
PHP使用Session遇到的一个Permission denied Notice解决办法
2014/07/30 PHP
php实现无限级分类
2014/12/24 PHP
Yii的Srbac插件用法详解
2016/07/14 PHP
PHP常用函数总结(180多个)
2016/12/25 PHP
php中的异常和错误浅析
2017/05/03 PHP
通过代码实例解析PHP session工作原理
2020/12/11 PHP
深入聊聊Array的sort方法的使用技巧.详细点评protype.js中的sortBy方法
2007/04/12 Javascript
IE和FireFox(FF)中js和css的不同
2009/04/13 Javascript
Jquery 实现Tab效果 思路是js思路
2010/03/02 Javascript
innerHTML与jquery里的html()区别介绍
2012/10/12 Javascript
jquery应该如何来设置改变按钮input的onclick事件
2012/12/10 Javascript
JS 添加千分位与去掉千分位的示例
2013/07/11 Javascript
js之onload事件的一点使用心得
2013/08/14 Javascript
javascript实现的平方米、亩、公顷单位换算小程序
2014/08/11 Javascript
jQuery实现选项联动轮播效果【附实例】
2016/04/19 Javascript
[原创]Javascript 实现广告后加载 可加载百度谷歌联盟广告
2016/05/11 Javascript
canvas实现图像截取功能
2017/02/06 Javascript
React如何将组件渲染到指定DOM节点详解
2017/09/08 Javascript
详解在express站点中使用ejs模板引擎
2017/09/21 Javascript
JavaScript事件对象event用法分析
2018/07/27 Javascript
使用mixins实现elementUI表单全局验证的解决方法
2019/04/02 Javascript
如何基于javascript实现贪吃蛇游戏
2020/02/09 Javascript
[01:00:53]2018DOTA2亚洲邀请赛3月29日 小组赛B组 iG VS Secret
2018/03/30 DOTA
自己编程中遇到的Python错误和解决方法汇总整理
2015/06/03 Python
一步步解析Python斗牛游戏的概率
2016/02/12 Python
Django实现全文检索的方法(支持中文)
2018/05/14 Python
python之cv2与图像的载入、显示和保存实例
2018/12/05 Python
Python银行系统实战源码
2019/10/25 Python
使用python实现学生信息管理系统
2021/02/25 Python
瑞典时尚耳机品牌:Urbanears
2017/07/26 全球购物
加拿大廉价机票预订网站:CheapOair.ca
2018/03/04 全球购物
项目合作协议书范本
2014/04/16 职场文书
装饰技术负责人岗位职责
2015/04/13 职场文书
公司员工离职感言
2015/08/03 职场文书