首先是最常规的方法:
程序代码
test
<script> <BR>function test(){ <BR>alert("test"); <BR>} <BR></script>
当某一天,我们知道JavaScript要跟HTML结构实现分离后,就会改了一种写法:
程序代码
test
<script> <BR>function test(){ <BR>alert("test"); <BR>} <BR>window.onload = function(){ <BR>document.getElementById("para").onclick = test; <BR>} <BR></script>
当我们工作越来越久后,有时候我们需要对某个元素绑定多个相同的事件类型:
程序代码
test
<script> <BR>function test(){ <BR>alert("test"); <BR>} <BR>function pig(){ <BR>alert("pig"); <BR>} <BR>window.onload = function(){ <BR>document.getElementById("para").onclick = test; <BR>document.getElementById("para").onclick = pig; <BR>} <BR></script>
如果按照上面的写法,我们只能输出第二个函数。
这时候我们需要用到attachEvent方法:
程序代码
test
<script> <BR>function test(){ <BR>alert("test"); <BR>} <BR>function pig(){ <BR>alert("pig"); <BR>} <BR>window.onload = function(){ <BR>document.getElementById("para").attachEvent("onclick",test); <BR>document.getElementById("para").attachEvent("onclick",pig); <BR>} <BR></script>
在一段时间内,你并没发现这段代码有任何错误。
某一天,一个名叫firefox的浏览器 闯入你的视野,当我们把这段代码放到firefox中执行后,
发现并不能正常运行。 问题就这样,越来越多,然而作为一名JS程序员,这些都是必须面对的。
为了解决这段代码的平台兼容性问题,我翻翻手册,知道了firefox跟ie的区别:
firefox中注册事件使用:addEventListener方法,同时为了兼容ie,我们必须用到if ... else...
程序代码
test
<script> <BR>function test(){ <BR>alert("test"); <BR>} <BR>function pig(){ <BR>alert("pig"); <BR>} <BR>window.onload = function(){ <BR>var element = document.getElementById("para"); <BR>if(element.addEventListener){ // firefox , w3c <BR>element.addEventListener("click",test,false); <BR>element.addEventListener("click",pig,false); <BR>} else { // ie <BR>element.attachEvent("onclick",test); <BR>element.attachEvent("onclick",pig); <BR>} <BR>} <BR></script>
此时,代码就可以在多个平台上工作了。
但随着水平的进步,你不满足每次都去判断,你想把这个判断封装起来,以后可以直接调用:
程序代码
test
<script> <BR>function test(){ <BR>alert("test"); <BR>} <BR>function pig(){ <BR>alert("pig"); <BR>} <BR>function addListener(element,e,fn){ <BR>if(element.addEventListener){ <BR>element.addEventListener(e,fn,false); <BR>} else { <BR>element.attachEvent("on" + e,fn); <BR>} <BR>} <BR>window.onload = function(){ <BR>var element = document.getElementById("para"); <BR>addListener(element,"click",test); <BR>addListener(element,"click",pig); <BR>} <BR></script>
至此,作为一个程序员的工作就完了。
中间我们从一个最传统,最基本的写法 , 然后实现Js和HTML的分离,然后又实现对同一个元素注册多个事件,期间,我们发现注册事件的兼容性问题。最后我们对注册事件的方法进行封装,方便以后使用。
Stellungnahme:Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn