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 实现的可折叠留言板(附源码下载)
Jul 01 Javascript
jQuery实现带滚动线条导航效果的方法
Jan 30 Javascript
JS+DIV实现鼠标划过切换层效果的方法
May 25 Javascript
jQuery 移动端artEditor富文本编辑器
Jan 11 Javascript
需灵活掌握的Bootstrap预定义排版类 你精通吗?
Jun 20 Javascript
关于JSON与JSONP简单总结
Aug 16 Javascript
vue2.0 自定义 饼状图 (Echarts)组件的方法
Mar 02 Javascript
浅谈微信页面入口文件被缓存解决方案
Sep 29 Javascript
详解微信小程序回到顶部的两种方式
May 09 Javascript
微信端调取相册和摄像头功能,实现图片上传,并上传到服务器
May 16 Javascript
jQuery属性选择器用法实例分析
Jun 28 jQuery
koa-passport实现本地验证的方法示例
Feb 20 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
thinkphp3.2同时连接两个数据库的简单方法
2019/08/13 PHP
AJAX使用了UpdatePanel后无法使用alert弹出脚本
2010/04/02 Javascript
使用jQuery的将桌面应用程序引入浏览器
2010/11/19 Javascript
基于jquery的图片轮播 tab切换组件
2012/07/19 Javascript
浅谈关于JavaScript的语言特性分析
2013/04/11 Javascript
jquery异步跨域访问代码
2013/06/28 Javascript
导航跟随滚动条置顶移动示例代码
2013/09/11 Javascript
深入理解Javascript中this的作用域
2014/08/12 Javascript
超实用的JavaScript表单代码段
2016/02/26 Javascript
jQuery基本过滤选择器用法示例
2016/09/09 Javascript
微信小程序 支付简单实例及注意事项
2017/01/06 Javascript
node+vue实现用户注册和头像上传的实例代码
2017/07/20 Javascript
浅谈VUE监听窗口变化事件的问题
2018/02/24 Javascript
jQuery实现文字超过1行、2行或规定的行数时自动加省略号的方法
2018/03/28 jQuery
详解nodejs解压版安装和配置(带有搭建前端项目脚手架)
2018/12/06 NodeJs
nodejs基础之buffer缓冲区用法分析
2018/12/26 NodeJs
详解javascript对数组和json数组的操作
2019/04/15 Javascript
原生js添加一个或多个类名的方法分析
2019/07/30 Javascript
[01:01:22]VGJ.S vs OG 2018国际邀请赛淘汰赛BO3 第一场 8.22
2018/08/23 DOTA
Python实现股市信息下载的方法
2015/06/15 Python
Python通过matplotlib绘制动画简单实例
2017/12/13 Python
Django中使用Celery的教程详解
2018/08/24 Python
Python3实现从排序数组中删除重复项算法分析
2019/04/03 Python
Python字符串匹配之6种方法的使用详解
2019/04/08 Python
详解如何减少python内存的消耗
2019/08/09 Python
Django实现任意文件上传(最简单的方法)
2020/06/03 Python
法国时尚品牌乐都特瑞士站:La Redoute瑞士
2016/09/05 全球购物
日本AOKI官方商城:AOKI西装
2020/06/11 全球购物
Ajax请求总共有多少种Callback
2016/07/17 面试题
介绍一下Java中的static关键字
2012/05/12 面试题
户外用品商店创业计划书
2014/01/29 职场文书
总经理助理职责
2014/02/04 职场文书
党员干部观看《周恩来四个昼夜》思想汇报
2014/09/10 职场文书
2016年政治理论学习心得体会
2016/01/25 职场文书
浅谈JS的原型和原型链
2021/06/04 Javascript
python中Pyqt5使用Qlabel标签播放视频
2022/04/22 Python