<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)航:
     
    我要啦免费统计
    主站蜘蛛池模板: 亚洲情a成黄在线观看| 亚洲视频一区调教| 亚洲免费在线视频| 亚洲第一页在线视频| 国产精品免费电影| aa级毛片毛片免费观看久| 亚洲另类图片另类电影| vvvv99日韩精品亚洲| 曰批视频免费40分钟试看天天| 亚洲国产精品无码观看久久| 亚洲中文字幕无码久久精品1| 亚洲高清中文字幕免费| 免费无码婬片aaa直播表情| 亚洲经典在线观看| 亚洲国产日韩在线观频| av无码国产在线看免费网站 | 亚洲成人动漫在线| 日本特黄a级高清免费大片| 日本免费中文字幕| 亚洲AV无码专区国产乱码不卡| 亚洲AV无码国产在丝袜线观看| 国产视频精品免费| 在免费jizzjizz在线播| 国产免费一区二区三区免费视频| 美女视频黄免费亚洲| 亚洲AV日韩精品久久久久久| 亚洲国产91精品无码专区| 久久www免费人成看片| 久久一区二区三区免费| 国产精品亚洲专区在线播放| 国产成人精品亚洲2020| 亚洲国产香蕉碰碰人人| 久久亚洲中文字幕精品一区四| 在线免费观看色片| 91成年人免费视频| 免费国产午夜高清在线视频| eeuss在线兵区免费观看| 毛片亚洲AV无码精品国产午夜| 精品国产日韩久久亚洲| 久久亚洲精品国产精品| 亚洲AV无码久久精品蜜桃|