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,超强推荐expand.js
Dec 23 Javascript
JavaScript 解析读取XML文档 实例代码
Jul 07 Javascript
jQuery 方法大全方便学习参考
Feb 25 Javascript
基于jQuery的自动完成插件
Feb 03 Javascript
小试JQuery的AutoComplete插件
May 04 Javascript
JS控制阿拉伯数字转为中文大写示例代码
Sep 04 Javascript
javascript轻松实现当鼠标移开时已弹出子菜单自动消失
Dec 29 Javascript
JS的数组迭代方法
Feb 05 Javascript
React Native AsyncStorage本地存储工具类
Oct 24 Javascript
详解Vue.js 作用域、slot用法(单个slot、具名slot)
Oct 15 Javascript
解决vue中的无限循环问题
Jul 27 Javascript
JS removeAttribute()方法实现删除元素的某个属性
Jan 11 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 INI配置文件的解析实现分析
2011/01/04 PHP
PHP面向对象程序设计之类常量用法实例
2014/08/20 PHP
PHP使用json_encode函数时不转义中文的解决方法
2014/11/12 PHP
yii2实现根据时间搜索的方法
2016/05/25 PHP
php批量删除操作代码分享
2017/02/26 PHP
PHP实现数据四舍五入的方法小结【4种方法】
2019/03/27 PHP
Javascript 复制数组实现代码
2009/11/26 Javascript
jQuery事件绑定.on()简要概述及应用
2013/02/07 Javascript
js给onclick事件赋值,动态传参数实例解说
2013/03/28 Javascript
jQuery的promise与deferred对象在异步回调中的作用
2016/05/03 Javascript
Google 地图叠加层实例讲解
2016/08/06 Javascript
纯css下拉菜单 无需js
2016/08/15 Javascript
vue.js树形组件之删除双击增加分支实例代码
2017/02/28 Javascript
JS创建Tag标签的方法详解
2017/06/09 Javascript
通过vue提供的keep-alive减少对服务器的请求次数
2018/04/01 Javascript
Angular动态绑定样式及改变UI框架样式的方法小结
2018/09/03 Javascript
微信小程序mpvue点击按钮获取button值的方法
2019/05/29 Javascript
使用flow来规范javascript的变量类型
2019/09/12 Javascript
IE11下CKEditor在Bootstrap Modal中下拉问题的解决
2019/09/25 Javascript
详解Vue template 如何支持多个根结点
2020/02/10 Javascript
详解JavaScript 作用域
2020/07/14 Javascript
vue 获取到数据但却渲染不到页面上的解决方法
2020/11/19 Vue.js
Python交换变量
2008/09/06 Python
使用Python读写及压缩和解压缩文件的示例
2016/07/08 Python
详解Python中的分组函数groupby和itertools)
2018/07/11 Python
Python pandas RFM模型应用实例详解
2019/11/20 Python
python函数声明和调用定义及原理详解
2019/12/02 Python
美国男装连锁零售商:Men’s Wearhouse
2016/10/14 全球购物
丝芙兰加拿大官方网站:SEPHORA加拿大
2018/11/20 全球购物
PHP如何自定义函数
2016/09/16 面试题
应聘美工求职信
2013/11/07 职场文书
房屋改造计划书
2014/01/10 职场文书
优秀党支部书记事迹材料
2014/05/29 职场文书
超市理货员岗位职责
2014/07/04 职场文书
环境卫生工作汇报材料
2014/10/28 职场文书
​(迎国庆)作文之我爱我的祖国
2019/09/19 职场文书