<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    陌上花開

    遇高山,我御風而翔,逢江河,我凌波微波

       :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
     在DHTML開發中,微軟在其DOM中為每個元素實現了一個fireEvent方法。我們知道HTML的事件onXXX可以由系統(IE環境)來管理和觸發,也可以直接執行事件的handler,比如onclick,如果被賦予事件處理函數,我們可以用element.onclick()來執行事件處理函數。那么fireEvent用來干嘛呢?

        在MSDN中fireEvent的描述很簡單:Fires a specified event on the object.
        bFired = object.fireEvent(sEvent [, oEventObject])

        并且MSDN給出了一個使用fireEvent的示例:
    <HTML>
        
    <HEAD>
            
    <SCRIPT>
            
    function fnFireEvents()
            
    {
                div.innerText 
    = "The cursor has moved over me!";
                btn.fireEvent(
    "onclick");
            }

            
    </SCRIPT>
        
    </HEAD>
        
    <BODY>
            
    <h1>Using the fireEvent method</h1>
            By moving the cursor over the DIV below, the button is clicked.
            
    <DIV ID="div" onmouseover="fnFireEvents();">
                Mouse over this!
            
    </DIV>
            
    <BUTTON ID="btn" ONCLICK="this.innerText='I have been clicked!'">Button</BUTTON>
        
    </BODY>
    </HTML>

        這個示例非常的簡單,也完全說明了fireEvent的用法。不過這個示例有一點誤導我們,從而讓我們不容易發現frieEvent更有價值的使用方法。由于button的onclick事件被賦予語句:this.innerText = 'I have been clicked!',這里很容易誤導我們,fireEvent產生的是執行了btn.onclick()的效果。嗯,確實是這個效果,但是意義卻完全不同,btn.onclick()只是一個函數調用,它的執行必須依賴于用戶對其賦值,否則btn.onclick為null,是不能執行btn.onclick()的。而fireEvent('onclick')的效果,"等同于"鼠標在button元素上進行了點擊。

        由于IE的事件處理是bubble up方式,fireEvent(sEvent)就顯得更加的有意義了,如果我們在一個table元素<table>中監聽事件,比如onclick,當點擊不同的td做出不同的響應時。如果使用程序來模擬,只能使用fireEvent這種方式,示例如下:

    <table border="1" onclick="alert(event.srcElement.innerText);">
        
    <tr>
            
    <td id="abc">abc</td>
            
    <td id="def">def</td>
        
    </tr>
    </table>
    <button onclick="abc.fireEvent('onclick')">
        abc
    </button>
    <button onclick="def.fireEvent('onclick')">
        def
    </button>

        使用abc.onclick()和def.onclick()將得到"Object doesn't support this property or method"異常。

       
    abc def

         

        知道了fireEvent的用法,那么我們用它來做什么呢?在開發具有復雜事件處理動作組件時。有時我們需要從程序中去觸發一個本身因該鼠標或鍵盤觸發的事件,比如在TreeView控件中,我們一般是使用鼠標點擊來Expand&Collapse一個結點,如果我們要用程序代碼來實現這個操作怎么辦呢?當然直接執行事件處理函數是可以的,不過如果事件處理函數依賴于event變量中的狀態值,那么就必須使用fireEvent方法。

        原來我曾經說過,因該把事件處理的函數封裝起來,便于直接調用。比如上面說到的TreeView節點的Expand和Collapse,我在TreeView控件中都是把它們封裝成兩個函數Expand和Collapse,在節點被點擊時,執行:
     OpIcon.onclick = function()
     {
         
    var objNode = this.Object;
         
    if ( objNode.m_IsExpanded )
             objNode.Collapse();
        
    else
             objNode.Expaned();
     }

        這樣一來,在程序中控制Expand和Collapse也就是分別執行函數而已。不過后來發現既然DOM中有fireEvent方法,似乎我在"
    轉載:
    http://www.cnblogs.com/birdshome/archive/2005/04/07/128182.html
    posted on 2010-04-01 22:19 askzs 閱讀(391) 評論(0)  編輯  收藏

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    我要啦免费统计
    主站蜘蛛池模板: 中文字幕中韩乱码亚洲大片| 亚洲日韩中文字幕日韩在线| 最新亚洲人成无码网站| 国产成人免费高清在线观看| 一区二区三区在线免费| 亚洲视频2020| 最新中文字幕免费视频| free哆拍拍免费永久视频| 亚洲一区免费观看| 韩国二级毛片免费播放| 中文字幕免费观看全部电影| 亚洲精品国产福利片| 波多野结衣免费视频观看| 热re99久久6国产精品免费| 亚洲夂夂婷婷色拍WW47| 国产aⅴ无码专区亚洲av| 国产精品久久久久久久久久免费 | 国产亚洲情侣久久精品| 亚洲精品无码成人AAA片| 成人a视频片在线观看免费| 国产黄在线播放免费观看| va天堂va亚洲va影视中文字幕| 亚洲国产一区视频| 国产一卡2卡3卡4卡无卡免费视频| 瑟瑟网站免费网站入口| 亚洲精品**中文毛片| 亚洲综合精品网站| 成年女人午夜毛片免费视频| a毛片视频免费观看影院| 色综合久久精品亚洲国产| 日韩亚洲Av人人夜夜澡人人爽 | 亚洲午夜免费视频| 国产亚洲福利精品一区二区| 亚洲精品美女视频| 亚洲午夜国产精品无码 | heyzo亚洲精品日韩| 99在线精品视频观看免费| 中国人免费观看高清在线观看二区 | 免费人成视频x8x8入口| 青青青国产在线观看免费网站 | 久久九九兔免费精品6|