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 相关文章推荐
jquery tools之tabs 选项卡/页签
Jul 25 Javascript
js表格分页实现代码
Sep 18 Javascript
javascript中的变量作用域以及变量提升详细介绍
Oct 24 Javascript
JavaScript中函数(Function)的apply与call理解
Jul 08 Javascript
jQuery实现图片走马灯效果的原理分析
Jan 16 Javascript
JS实现页面中所有img对象添加onclick事件及新窗口查看图片的方法
Dec 27 Javascript
jQuery实现div跟随鼠标移动
Aug 20 jQuery
关于node-bindings无法在Electron中使用的解决办法
Dec 18 Javascript
vue.js实现的幻灯片功能示例
Jan 18 Javascript
Vue中实现权限控制的方法示例
Jun 07 Javascript
Vue 实现输入框新增搜索历史记录功能
Oct 15 Javascript
微信小程序添加插屏广告并设置显示频率(一天一次)
Dec 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
PHP无限分类代码,支持数组格式化、直接输出菜单两种方式
2011/05/18 PHP
关于UEditor编辑器远程图片上传失败的解决办法
2012/08/31 PHP
php生成数组的使用示例 php全组合算法
2014/01/16 PHP
详解PHP中strlen和mb_strlen函数的区别
2014/03/07 PHP
php实现的Timer页面运行时间监测类
2014/09/24 PHP
php简单实现查询数据库返回json数据
2015/04/16 PHP
浅谈PHP链表数据结构(单链表)
2016/06/08 PHP
yii2 在控制器中验证请求参数的使用方法
2019/06/19 PHP
会自动逐行上升的文本框
2006/06/30 Javascript
js实现双向链表互联网机顶盒实战应用实现
2011/10/28 Javascript
弹出窗口并且此窗口带有半透明的遮罩层效果
2014/03/13 Javascript
javascript判断是否按回车键并解决浏览器之间的差异
2014/05/13 Javascript
jQuery实现仿美橙互联两级导航菜单效果完整实例
2015/09/17 Javascript
js倒计时抢购实例
2015/12/20 Javascript
JavaScript学习笔记之数组的增、删、改、查
2016/03/23 Javascript
实现JavaScript的组成----BOM和DOM详解
2016/05/18 Javascript
javaScript事件机制兼容【详细整理】
2016/07/23 Javascript
jQuery EasyUI datagrid在翻页以后仍能记录被选中行的实现代码
2016/08/15 Javascript
vee-validate vue 2.0自定义表单验证的实例
2018/08/28 Javascript
bootstrap table插件动态加载表头
2019/07/19 Javascript
浅谈vue中get请求解决传输数据是数组格式的问题
2020/08/03 Javascript
[03:49]DOTA2英雄基础教程 光之守卫
2014/01/14 DOTA
[03:33]TI9战队采访 - Infamous
2019/08/20 DOTA
python编程-将Python程序转化为可执行程序[整理]
2007/04/09 Python
浅析Python中signal包的使用
2015/11/13 Python
python实现学生管理系统
2018/01/11 Python
详解Django 中是否使用时区的区别
2018/06/14 Python
关于Python内存分配时的小秘密分享
2019/09/05 Python
python使用pip安装模块出现ReadTimeoutError: HTTPSConnectionPool的解决方法
2019/10/04 Python
python add_argument()用法解析
2020/01/29 Python
Python matplotlib修改默认字体的操作
2020/03/05 Python
使用scrapy ImagesPipeline爬取图片资源的示例代码
2020/09/28 Python
高校辅导员推荐信范文
2013/12/25 职场文书
双十佳事迹材料
2014/01/29 职场文书
巾帼文明岗事迹材料
2014/12/24 职场文书
MySQL触发器的使用
2021/05/24 MySQL