第三種方式,EVENT對象是通過一個隱含的參數(shù)arguments[0](IE+Firefox)傳遞進事件處理函數(shù)的。在IE下無法通過this指針獲取img的引用,在Firefox下可以。
寫到這里,我們看看撿到了多少珠子和貝殼:代碼分離、注冊多個監(jiān)聽器、為事件處理函數(shù)傳參、可移植性。隨著撿到的珠子和貝殼越來越多,你會發(fā)現(xiàn)疑問沒有減少,而是越來越多,這說明你已經(jīng)似懂非懂了。這正是學(xué)習(xí)普遍的規(guī)律:你知識的外延越大,你的未知領(lǐng)域越大。這時,我們需要一條線把這些珠子串起來。這條線是什么?一些關(guān)于JS事件機制和事件對象的詳細介紹。推薦大家去閱讀:http://m.95time.cn/tech/web/2008/5512.asp
也可以閱讀我在博客里的注釋版本:http://hgx127.blog.163.com/blog/static/11066082008213104527721/
當(dāng)我們將事件機制和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; //跨瀏覽器和方便應(yīng)用的考慮,我們可以在這里重寫EVENT對象的許多屬性。 //比如: //事件目標(biāo)對象的獲取 //事件發(fā)生時鼠標(biāo)的位置及相對位置 //鼠標(biāo)鍵(左中右滾輪)等 } 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)” />
這樣我們的“項鏈”具備了雛形,可以應(yīng)付日常的事件處理需要。但是,我們應(yīng)該滿足嗎?不,絕不是!我們還有相當(dāng)多的問題沒有解決,比如:
為什么在IE下第三種方式無法通過this指針引用事件目標(biāo)對象?
如果我們需要向事件處理函數(shù)傳遞更多的參數(shù)應(yīng)該怎么辦?
如果我們要將上述代碼封裝進入一個類應(yīng)該如何做?
如何讓我們的代碼具有更廣泛的平臺適應(yīng)性?
……
搞懂了那些珠子和貝殼并簡單連接之后,我們還可以做得更好嗎?答案是肯定的。
但是該怎么做呢?保持上面的研究精神,現(xiàn)在我們需要借鑒:
對,去研究成熟的JS框架!看看大牛兒們是怎么處理事件的。比如:EXT、Prototype、Dojo、Mootools、Spry、Jquery…130多種呢,夠研究一陣子的。(呵呵,不用研究那么多,這些框架之間都是有共性的,建議深入研究一兩個就夠了,其他的參考)
需要多說一點兒的是:不要清高得煙火不進,原創(chuàng)不是這么干的。什么是知識?把別人的東西掌握之后變成自己的就是我的知識(強盜精神,呵呵~~)。
研究過這些框架之后,我們才能知道差距在哪里。然后,我們學(xué)習(xí)大牛兒們的處理問題的手段,理解他們的編程理念,拓寬我們的知識面,Copy他們的編碼風(fēng)格,像他們一樣做注釋……
工作之中一點一滴的積累并有意識的整合是比較適合工作中的學(xué)習(xí)環(huán)境的。也是我說的以點到面的意義:一粒沙里瞰世界,掌握世界!秉著一份學(xué)習(xí)的心態(tài)來工作,常問問自己:“我還可以做得更好嗎?” 這樣會獲得無限的動力,當(dāng)在工作中驗證了自己的研究成果時,你會有成就感,畢竟我們都需要鼓勵與認(rèn)可。在學(xué)習(xí)中也要學(xué)會自己獎勵自己,不斷的阿Q一下。告訴自己,現(xiàn)在的我可以默默無聞,但是有一天,我會成為大牛兒!甚至可以刷新歷史!
這樣堅持做下去,當(dāng)你期待加入一個團隊的時候,你會收到盛情的邀請,而不是在奢望中乞求別人送你一份工作;當(dāng)你組建一個團隊的時候,你的精神會感染里面的每一個人,會讓這個團隊朝氣蓬勃,而不是人心渙散,搞成“將熊熊一窩”的垃圾團隊。這是我們Coder的尊嚴(yán),而尊嚴(yán)從來不是什么人給的,是我們的努力掙來的。
出處:藍色理想
責(zé)任編輯:moby
上一頁 致有追求的Coder和可愛的部門同事 [2] 下一頁 致有追求的Coder和可愛的部門同事 [4]
◎進入論壇網(wǎng)頁制作、WEB標(biāo)準(zhǔn)化版塊參加討論,我還想發(fā)表評論。
|