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 相关文章推荐
ExtJS中文乱码之GBK格式编码解决方案及代码
Jan 20 Javascript
JS 去除Array中的null值示例代码
Nov 20 Javascript
HTML5基于Tomcat 7.0实现WebSocket连接并实现简单的实时聊天
Oct 31 Javascript
谈谈jQuery之Deferred源码剖析
Dec 19 Javascript
javascript修改浏览器title方法 JS动态修改浏览器标题
Nov 30 Javascript
简单谈谈CommonsChunkPlugin抽取公共模块
Dec 31 Javascript
详解nuxt sass全局变量(公共scss解决方案)
Jun 27 Javascript
解决vue router组件状态刷新消失的问题
Aug 01 Javascript
vuejs移动端实现div拖拽移动
Jul 25 Javascript
vue组件系列之TagsInput详解
May 14 Javascript
Javascript实现鼠标移入方向感知
Jun 24 Javascript
AJAX实现指定部分页面刷新效果
Oct 16 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中强制下载文件的代码(解决了IE下中文文件名乱码问题)
2011/05/09 PHP
php上传图片之时间戳命名(保存路径)
2014/08/15 PHP
从零开始学YII2框架(四)扩展插件yii2-kartikgii
2014/08/20 PHP
微信公众平台开发实现2048游戏的方法
2015/04/15 PHP
基于OpenCart 开发支付宝,财付通,微信支付参数错误问题
2015/10/01 PHP
JavaScript 节点操作 以及DOMDocument属性和方法
2007/12/06 Javascript
JavaScript中通过闭包解决只能取得包含函数中任何变量最后一个值的问题
2010/08/12 Javascript
JavaScript数组常用方法
2015/03/02 Javascript
Javascript中的方法和匿名方法实例详解
2015/06/13 Javascript
JavaScript生成SQL查询表单的方法
2015/08/13 Javascript
理解JS事件循环
2016/01/07 Javascript
jQuery实现只允许输入数字和小数点的方法
2016/03/02 Javascript
快速掌握Node.js之Window下配置NodeJs环境
2016/03/21 NodeJs
深入理解ECMAScript的几个关键语句
2016/06/01 Javascript
json的使用小结
2016/06/08 Javascript
轻松实现js弹框显示选项
2016/09/13 Javascript
Javascript 普通函数和构造函数的区别
2016/11/05 Javascript
概述一个页面从输入URL到页面加载完的过程
2016/12/16 Javascript
解决jQuery ajax动态新增节点无法触发点击事件的问题
2017/05/24 jQuery
nodejs动态创建二维码的方法
2017/08/12 NodeJs
详解如何提升JSON.stringify()的性能
2019/06/12 Javascript
Vue实现验证码功能
2019/12/03 Javascript
js中forEach,for in,for of循环的用法示例小结
2020/03/14 Javascript
Vue.js桌面端自定义滚动条组件之美化滚动条VScroll
2020/12/01 Vue.js
python创建临时文件夹的方法
2015/07/06 Python
python递归实现快速排序
2018/08/18 Python
解决Python 命令行执行脚本时,提示导入的包找不到的问题
2019/01/19 Python
Python学习笔记之Zip和Enumerate用法实例分析
2019/08/14 Python
Python实现滑动平均(Moving Average)的例子
2019/08/24 Python
python中必要的名词解释
2019/11/20 Python
Python3实现建造者模式的示例代码
2020/06/28 Python
《蜗牛的奖杯》教后反思
2014/04/24 职场文书
乡文化站暑期培训方案
2014/08/28 职场文书
先进工作者事迹材料
2014/12/23 职场文书
2015年高考寄语或鼓励的话
2015/03/23 职场文书
关于职业道德的心得体会
2016/01/18 职场文书