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 相关文章推荐
node在两个div之间移动,用ztree实现
Mar 06 Javascript
javaScript对文字按照拼音排序实现代码
Dec 27 Javascript
javascript数据结构与算法之检索算法
Apr 04 Javascript
在localStorage中存储对象数组并读取的方法
Sep 24 Javascript
bootstrap选项卡使用方法解析
Jan 11 Javascript
在bootstrap中实现轮播图实例代码
Jun 11 Javascript
JS实现基于拖拽改变物体大小的方法
Jan 23 Javascript
JavaScript求一组数的最小公倍数和最大公约数常用算法详解【面向对象,回归迭代和循环】
May 07 Javascript
vue同步父子组件和异步父子组件的生命周期顺序问题
Oct 07 Javascript
js中值引用和地址引用实例分析
Jun 21 Javascript
vue中使用vee-validator完成表单校验方案
Nov 01 Javascript
Paypal支付不完全指北
Jun 04 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
1.PHP简介
2006/10/09 PHP
菜鸟学PHP之Smarty入门
2007/01/04 PHP
php object转数组示例
2014/01/15 PHP
PHP中对各种加密算法、Hash算法的速度测试对比代码
2014/07/08 PHP
php递归遍历多维数组的方法
2015/04/18 PHP
PHP 传输会话curl函数的实例详解
2017/09/12 PHP
php双层循环(九九乘法表)
2017/10/23 PHP
PHP实现图片压缩
2020/09/09 PHP
Laravel框架实现多数据库连接操作详解
2019/07/12 PHP
PHP7 安装event扩展的实现方法
2019/10/08 PHP
JavaScript 节点操作 以及DOMDocument属性和方法
2007/12/06 Javascript
js的一些常用方法小结
2011/06/29 Javascript
了不起的node.js读书笔记之例程分析
2014/12/22 Javascript
jQuery制作可自定义大小的拼图游戏
2015/03/30 Javascript
微信JS接口大全
2016/08/25 Javascript
AngularJS入门教程之数据绑定原理详解
2016/11/02 Javascript
HTML的select控件美化
2017/03/27 Javascript
jQuery实现导航栏头部菜单项点击后变换颜色的方法
2017/07/19 jQuery
js 事件的传播机制(实例讲解)
2017/07/20 Javascript
JavaScript中Hoisting详解 (变量提升与函数声明提升)
2017/08/18 Javascript
JS基于for语句编写的九九乘法表示例
2018/01/04 Javascript
Vue表单类的父子组件数据传递示例
2018/05/03 Javascript
JS中的算法与数据结构之栈(Stack)实例详解
2019/08/20 Javascript
[08:06]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Elephant 选手采访
2021/03/11 DOTA
Python iter()函数用法实例分析
2018/03/17 Python
numpy返回array中元素的index方法
2018/06/27 Python
python GUI库图形界面开发之PyQt5选项卡控件QTabWidget详细使用方法与实例
2020/03/01 Python
python3判断IP地址的方法
2021/03/04 Python
CSS3改变浏览器滚动条样式
2019/01/04 HTML / CSS
Mytheresa中国官网:德国时尚奢侈品商城
2017/08/04 全球购物
商场经理竞聘演讲稿
2014/01/01 职场文书
刑事上诉状(无罪)
2015/05/23 职场文书
员工离职证明范本
2015/06/12 职场文书
Django框架中视图的用法
2022/06/10 Python
如何基于python实现单目三维重建详解
2022/06/25 Python
CSS中使用grid布局实现一套模板多种布局
2022/07/15 HTML / CSS