欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JScript面向事件驅(qū)動(dòng)的編程

 更新時(shí)間:2007年01月11日 00:00:00   作者:  
世間萬物,千變?nèi)f化,面向?qū)ο蟮木幊桃嗍菍ΜF(xiàn)實(shí)社會(huì)的模擬,而JavaScript是一種基于對象并且很接近面向?qū)ο缶幊痰木幊陶Z言,而我們web設(shè)計(jì)師/程序員跟JavaScript打交道亦要直面JavaScript才能夠把網(wǎng)頁寫得更加豐富多彩.在此先搞清楚一點(diǎn)就是:JavaScript并不僅僅用在Web上,它可以用在許多領(lǐng)域,當(dāng)然我這里討論的更多的是JavaScript在Web上的應(yīng)用,并且主要是事件方面的應(yīng)用.

JavaScript并不能直接對Web對象進(jìn)行操作,而是要通過瀏覽器提供的Document Object Modle(即常聽說的DOM,文檔模型對象)來操作對象.HTML是一個(gè)樹文檔,它以HTML標(biāo)簽為根,其它的元素都是在HTML標(biāo)簽之內(nèi),一級一級地延伸下去.而DOM中,則以window為根對象,其它的對象則為它的子對象或者它的子對象的子對象.

首先來認(rèn)識(shí)一下什么叫事件,請看下邊的代碼:

[Ctrl+A 全選 注:引入外部Js需再刷新一下頁面才能執(zhí)行]

很簡單的一個(gè)實(shí)例,頁面只有一個(gè)按鈕,它的value值為"這是一個(gè)按鈕",并且我們給它指定了onclick屬性,它的值為一行JavaScript代碼,使用了window對象的alert方法,將this.value的內(nèi)容顯示在警告窗體中.這里的this是啥呢?this就是當(dāng)前操作的對象,即該input對象.這份代碼告訴瀏覽器:"當(dāng)前對象受點(diǎn)擊"的時(shí)候要調(diào)用window.alert(this.value)這行代碼,因此瀏覽器在按鈕受點(diǎn)擊的時(shí)候就執(zhí)行了相關(guān)的操作.一個(gè)對象可以有許多事件,比如說單擊(click),雙擊(dbclick),鼠標(biāo)移到上邊(mouseover),鼠標(biāo)移開(mouseout)等等,這些事件經(jīng)常在各種流傳的代碼中可以看到.那如何給一個(gè)對象設(shè)置事件發(fā)生時(shí)執(zhí)行的代碼呢?一般來說有以下三種方式:

第一種:直接設(shè)置HTML元素的事件屬性,名稱一般是on+事件名稱,比如說單擊事件即為onclick,實(shí)例請見上邊的代碼

第二種:在script中對HTML對象設(shè)置事件屬性,名稱一般也是on+事件名稱,比如說obj.onclick = 函數(shù),請見實(shí)例代碼:

[Ctrl+A 全選 注:引入外部Js需再刷新一下頁面才能執(zhí)行]

或者:

[Ctrl+A 全選 注:引入外部Js需再刷新一下頁面才能執(zhí)行]

這第二種方式有兩種方法來指定執(zhí)行的代碼,但本質(zhì)上是一樣的,同樣是指定一個(gè)函數(shù)給對象,要求對象當(dāng)某事件發(fā)生的時(shí)候執(zhí)行該函數(shù).
第三種方式: 使用obj.attachEvent(IE瀏覽器)/obj.addEventListener方法來指定,建議使用此方法:

[Ctrl+A 全選 注:引入外部Js需再刷新一下頁面才能執(zhí)行]

為什么建議第三種方式呢?上邊所列的第一種方式很明顯只是設(shè)置一下元素屬性,只可能指定一次,而第二種方式與第三種方式的差別可以從下邊的實(shí)例中看出來:

[Ctrl+A 全選 注:引入外部Js需再刷新一下頁面才能執(zhí)行]

上邊的示例使用了兩個(gè)按鈕,并且使用了第二種方式與第三種方式先后指定了兩個(gè)函數(shù)給click事件,點(diǎn)擊第一個(gè)按鈕可以看到彈出了"指定的第二個(gè)函數(shù)",說明只有MyButton_Onclick1_2函數(shù)生效,而先前指定的MyButton_Onclick1_1被MyButton_Onclick1_2代替了。點(diǎn)擊第二個(gè)按鈕可以看到彈出了兩個(gè)窗體,顯示的內(nèi)容分別是"指定的第一個(gè)函數(shù)"和"指定的第二個(gè)函數(shù)",很明顯,使用attachEvent/addEventListener可以即增加要執(zhí)行的程序并且還能夠保留原有的程序,在IE中,它們是根據(jù)增加的順序倒序執(zhí)行,即先執(zhí)行后添加的MyButton_Onclick2_2,然后再執(zhí)行MyButton_Onclick2_1,而Firefox中則是相反,先執(zhí)行MyButton_Onclick2_1然后再執(zhí)行MyButton_Onclick2_2。。沒辦法,IE和Firefox是冤家,對著干。。呵呵

好了,俺還有項(xiàng)目要趕,只好先寫到這里,最近比較忙,呵呵。下篇文章計(jì)劃將利用本文的內(nèi)容寫一點(diǎn)應(yīng)用,內(nèi)容為:使用DHTML將span元素模擬成A元素,它亦是本文的后續(xù)文章,但不僅僅是關(guān)于事件了,還會(huì)配合CSS。

PS: 以上內(nèi)容皆為本人所知,如有不當(dāng)之處歡迎指正,不用給俺面子,文章內(nèi)容嚴(yán)謹(jǐn)才不會(huì)誤導(dǎo)讀者嘛。。同時(shí)也呼吁有能力的網(wǎng)友也加入到原創(chuàng)計(jì)劃中來。感謝此文的讀者以及支持無憂腳本原創(chuàng)計(jì)劃的網(wǎng)友。
再補(bǔ)充一個(gè) IE 專有的事件驅(qū)動(dòng)方法 Named Script
  雖然不太建議這么寫,不過做為一個(gè)介紹還是有必要的,如果在只考慮 IE 用戶的情況下,此方法還是有一定的便利性的。
Named Script 通過 <script> 標(biāo)簽來定義對象事件。
語法:
<SCRIPT
    CLASS=classname
    DEFER
    EVENT=eventname
    FOR=element
    ID=value
    LANGUAGE=JAVASCRIPT | JSCRIPT | VBSCRIPT  | VBS | XML
    SRC=url
    TITLE=text
    TYPE=MIME-type
>

  其它屬性與我們通常使用的 <script> 標(biāo)簽無異,就不過多介紹了,主要說的是 event 和 for 這兩個(gè)屬性。event 屬性表示了腳本在什么事件觸發(fā)執(zhí)行,for 屬性表示事件觸發(fā)的對象,就以紅亭的例子讓我們來看試一下:

[Ctrl+A 全選 注:引入外部Js需再刷新一下頁面才能執(zhí)行]

大家應(yīng)該看到了,效果和其它的方法是一樣的,也許有人會(huì)說既然一樣而且兼容性又不好,為什么還要這么用呢?請看下面的例子:

[Ctrl+A 全選 注:引入外部Js需再刷新一下頁面才能執(zhí)行]

這個(gè)例子有多個(gè)相同的 name 的對象,(注意:是 name 而不是 id,在 DOM 標(biāo)準(zhǔn)中 id 應(yīng)該是唯一的,雖然在 IE 中可以有多個(gè)相同 id 的對象,不過不建議大家這么做。)只用一句 Named Script 就可以對這些對象完成事件驅(qū)動(dòng),從代碼上來說簡便了不少,及至以后的修改也變的非常方便,這也是 Named Script 的最大優(yōu)點(diǎn)。

  應(yīng)用最多的地方會(huì)在表單的 Radio 或者 Checkbox 對象上,因?yàn)樗鼈円话愣紩?huì)有相同的 name,而同時(shí)也會(huì)有相同的事件驅(qū)動(dòng),具體的應(yīng)用范圍很廣,可以在無憂腳本 http://www.51j.com/ 里搜索到大量的應(yīng)用實(shí)例,在此僅做一些簡單的介紹,就不過多的舉例了。  最后再次重申一下,此方法僅為 IE 特有,其它其它瀏覽器不支持。
判斷window.document.all是否為null是判斷當(dāng)前瀏覽器是IE還是Firefox最簡單的方法,因?yàn)镮E有這個(gè)對象,而firefox沒有。

相關(guān)文章

最新評論