JavaScript中的5種事件使用方式解說

來源:互聯網
上載者:User

    為組件提供事件處理入口,可以極大的提高組件的封閉性,同時又能讓組件很好的和外界通訊。並且這也是我們已經習慣使用的一種開發模式,.NET、DHTML等都提供了一套完整的事件處理模型。下面是關於使用DHTML中事件的一個總結。

    DHTML提供了3種事件的使用方式,它們分別是:

    1、Inline HTML: <ELEMENT onXXX='handler'></ELEMENT>
    這是最簡單最常用的事件綁定方式,不過這裡onXXX的值為handler是不太確切的說法。其實這個handler的位置可以放置任何合法的JavaScript語句,因為IE在產生DHMTL樹時會為當前Element構建一個'匿名'成員方法,onXXX指向這個方法的handler。比如我們寫下,<element id='elmt' onXXX='var abc =0; for ( var i=0 ; i < 100 ; i++ ) abc+=i;'></element>,實際上在DHMTL樹種存在如下代碼結構:

function anonymous()
{
    var abc =0; for ( var i=0 ; i < 100 ; i++ ) abc+=i;
}

    此時anonymous方法中的this就是elmt對象。

    2、Event property: object.onXXX = handler
    這個使用方法是把函數名(handler)賦予element預定義的事件屬性上(onXXX)。這裡需要注意兩個問題:
    一是,我們在使用object.onXXX = handler是需要保證object已經在頁面中產生。比如我們為document.body賦予事件處理函數,我們必須保證document.body已經存在,就是說我們不能在<body>之前在的全域語句中使用document.body;
    二是,handler必須是函數名,和使用方法1中的handler可以是任何JavaScript語句不同!我們最容易出錯的使用是,當我們習慣了在inline html中使用<element id='elmt' onXXX = 'return false'></element>後,如果這樣使用elmt.onXXX='return false;'。那麼就歇菜了,不會有任何執行效果,當然IE也不報錯。正確的使用是:

elmt.onXXX = function() { return false; }

    3、Named Script: <SCRIPT FOR = object EVENT = onclick>
    IE獨家支援,沒有怎麼使用過,不覺得有什麼特別的地方哈。如果您知道它的妙處願聞其詳。

    DOM提供了兩種事件處理使用,它們分別是:

    1、attachEvent method:
    使用方法:bSuccess = object.attachEvent(sEvent, fpNotify)。解釋就抄msdn了
    Parameters

       sEvent Required. String that specifies any of the standard .
       fpNotify Required. Pointer that specifies the function to call when sEvent fires.

    Return Value
         Boolean. Returns one of the following possible values:

       true The function was bound successfully to the event.
       false The function was not bound to the event.

    DOM提供的這個事件附加方式實際上是一個集合操作,我們可以多次的向同一個事件簽名上attach多個事件處理函數,比如:

 window.attachEvent('onload', handler1);
 window.attachEvent('onload', handler2);
 window.attachEvent('onload', handler3);
 window.attachEvent('onload', handlerN);

    將會執行這個N個handler,但是不保證執行順序。這裡有個例外,attachEvent在document.body上attach事件'onload'沒有效果,但是attch window對象的'onload'是正確的。根據頁面初始化順序來看,及document.body.attachEvent('onload', handler)返回true來看,這因該是IE的一個bug。

    注意DHTML的Event Property方式和DOM的attachEvent方式的區別:

    Event Property方式,當觸發事件時,事件處理函數是一個無參數函數,我們只能通過event這個window的屬性來讀取和事件相關的資訊。attachEvent方式,當事件處理函數被觸發時,該函數的第一個參數arguments[0],預設是該視窗上的event。什麼意思呢?不明白參看這裡。

    2、fireEvent method
    請參看:在什麼時候才會用到fireEvent方法呢?

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.