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

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

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

    陌上花開

    遇高山,我御風(fēng)而翔,逢江河,我凌波微波

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

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

        并且MSDN給出了一個(gè)使用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>

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

        由于IE的事件處理是bubble up方式,fireEvent(sEvent)就顯得更加的有意義了,如果我們?cè)谝粋€(gè)table元素<table>中監(jiān)聽事件,比如onclick,當(dāng)點(diǎn)擊不同的td做出不同的響應(yīng)時(shí)。如果使用程序來模擬,只能使用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的用法,那么我們用它來做什么呢?在開發(fā)具有復(fù)雜事件處理動(dòng)作組件時(shí)。有時(shí)我們需要從程序中去觸發(fā)一個(gè)本身因該鼠標(biāo)或鍵盤觸發(fā)的事件,比如在TreeView控件中,我們一般是使用鼠標(biāo)點(diǎn)擊來Expand&Collapse一個(gè)結(jié)點(diǎn),如果我們要用程序代碼來實(shí)現(xiàn)這個(gè)操作怎么辦呢?當(dāng)然直接執(zhí)行事件處理函數(shù)是可以的,不過如果事件處理函數(shù)依賴于event變量中的狀態(tài)值,那么就必須使用fireEvent方法。

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

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

    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    我要啦免费统计
    主站蜘蛛池模板: 亚洲欧美日韩综合久久久久| 一级毛片完整版免费播放一区| 成年大片免费视频| 美女裸免费观看网站| 国精无码欧精品亚洲一区| 免费可以看黄的视频s色| 国产成人亚洲综合在线| 久久精品国产亚洲AV网站| 在线免费观看一级毛片| 一级做受视频免费是看美女| 亚洲黄色一级毛片| 免费一级特黄特色大片在线 | 久久国内免费视频| 污视频网站免费观看| 老汉色老汉首页a亚洲| 免费看小12萝裸体视频国产| 99re免费99re在线视频手机版| 亚洲av日韩av永久无码电影| 久久精品夜色国产亚洲av| 日韩在线看片免费人成视频播放| 国产午夜成人免费看片无遮挡 | 亚洲欧美日韩国产精品一区| 亚洲人成中文字幕在线观看 | 亚洲第一页在线观看| 亚洲国产成人久久综合区| 久久国内免费视频| 免费萌白酱国产一区二区三区 | 一区二区视频免费观看| 中文有码亚洲制服av片| 亚洲国产综合专区电影在线 | 四虎永久免费地址在线观看| 88av免费观看| 在线观看免费黄色网址| 相泽南亚洲一区二区在线播放| 亚洲性猛交xx乱| 狠狠色伊人亚洲综合成人| 四虎精品亚洲一区二区三区| 啦啦啦中文在线观看电视剧免费版| 日本免费人成网ww555在线| 无码毛片一区二区三区视频免费播放| 亚洲综合色区中文字幕|