第三种方式,EVENT对象是通过一个隐含的参数arguments[0](IE+Firefox)传递进事件处理函数的。在IE下无法通过this指针获取img的引用,在Firefox下可以。
写到这里,我们看看捡到了多少珠子和贝壳:代码分离、注册多个监听器、为事件处理函数传参、可移植性。随着捡到的珠子和贝壳越来越多,你会发现疑问没有减少,而是越来越多,这说明你已经似懂非懂了。这正是学习普遍的规律:你知识的外延越大,你的未知领域越大。这时,我们需要一条线把这些珠子串起来。这条线是什么?一些关于JS事件机制和事件对象的详细介绍。推荐大家去阅读:http://www.blueidea.com/tech/web/2008/5512.asp
也可以阅读我在博客里的注释版本:http://hgx127.blog.163.com/blog/static/11066082008213104527721/
当我们将事件机制和EVENT对象搞清楚之后,我们可以写出下面的代码:
<script type=”text/javascript”> function $(element){ if(typeof(element) == “string”){ return document.getElementById(element); } else { return element; } } function $E(e){ return e || window.event; //跨浏览器和方便应用的考虑,我们可以在这里重写EVENT对象的许多属性。 //比如: //事件目标对象的获取 //事件发生时鼠标的位置及相对位置 //鼠标键(左中右滚轮)等 } function addListener(element,e,fn){ if(element.addEventListener){ element.addEventListener(e,fn,false); } else { element.attachEvent(“on” + e,fn); } } function test(e){ e = $(e); var element = e.srcElement || e.target; alert(e.type + “\n” + element.tagName); } window.onload = function(){ var Img = $(“image”); addListener (Img,”click”,test); } </script> <img id=”image” src=”” onclick=”test(event,this)” />
这样我们的“项链”具备了雏形,可以应付日常的事件处理需要。但是,我们应该满足吗?不,绝不是!我们还有相当多的问题没有解决,比如:
为什么在IE下第三种方式无法通过this指针引用事件目标对象?
如果我们需要向事件处理函数传递更多的参数应该怎么办?
如果我们要将上述代码封装进入一个类应该如何做?
如何让我们的代码具有更广泛的平台适应性?
……
搞懂了那些珠子和贝壳并简单连接之后,我们还可以做得更好吗?答案是肯定的。
但是该怎么做呢?保持上面的研究精神,现在我们需要借鉴:
对,去研究成熟的JS框架!看看大牛儿们是怎么处理事件的。比如:EXT、Prototype、Dojo、Mootools、Spry、Jquery…130多种呢,够研究一阵子的。(呵呵,不用研究那么多,这些框架之间都是有共性的,建议深入研究一两个就够了,其他的参考)
需要多说一点儿的是:不要清高得烟火不进,原创不是这么干的。什么是知识?把别人的东西掌握之后变成自己的就是我的知识(强盗精神,呵呵~~)。
研究过这些框架之后,我们才能知道差距在哪里。然后,我们学习大牛儿们的处理问题的手段,理解他们的编程理念,拓宽我们的知识面,Copy他们的编码风格,像他们一样做注释……
工作之中一点一滴的积累并有意识的整合是比较适合工作中的学习环境的。也是我说的以点到面的意义:一粒沙里瞰世界,掌握世界!秉着一份学习的心态来工作,常问问自己:“我还可以做得更好吗?” 这样会获得无限的动力,当在工作中验证了自己的研究成果时,你会有成就感,毕竟我们都需要鼓励与认可。在学习中也要学会自己奖励自己,不断的阿Q一下。告诉自己,现在的我可以默默无闻,但是有一天,我会成为大牛儿!甚至可以刷新历史!
这样坚持做下去,当你期待加入一个团队的时候,你会收到盛情的邀请,而不是在奢望中乞求别人送你一份工作;当你组建一个团队的时候,你的精神会感染里面的每一个人,会让这个团队朝气蓬勃,而不是人心涣散,搞成“将熊熊一窝”的垃圾团队。这是我们Coder的尊严,而尊严从来不是什么人给的,是我们的努力挣来的。
出处:蓝色理想
责任编辑:moby
上一页 致有追求的Coder和可爱的部门同事 [2] 下一页 致有追求的Coder和可爱的部门同事 [4]
◎进入论坛网页制作、WEB标准化版块参加讨论,我还想发表评论。
|