事件冒泡控制項示例

2021-04-12 19:22:48 字數 2339 閱讀 4043

asp.net中,經常會用到很多的使用者控制項,有時候還把好幾步放在一起(就是next,next的這種),這個時候,事件的執行順序就複雜而且麻煩了。我遇到的情況就是要在第四步的pageload中執行一段**,並且在這一步的時候,頁面回傳的時候這段**又不需要執行。用ispostback不行,頁面剛剛載入的時候執行了,到第四步的時候根本就不會執行了...希望這篇文章有用。

asp.net 頁框架提供一種稱為「事件冒泡」的技術,允許子控制項將事件沿其包容層次結構向上傳播。事件冒泡允許在控制項層次結構中更方便的位置引發事件,並且允許將事件處理程式附加到原始控制項以及公開冒泡的事件的控制項上。

資料繫結控制項(repeater、datalist 和 datagrid)使用事件冒泡將子控制項(在專案模板內)引發的命令事件公開為頂級事件。雖然 .net framework 中的 asp.net 伺服器控制項將事件冒泡用於命令事件(事件資料類是從 commandeventargs 派生的事件),但是,伺服器控制項上定義的任何事件都可以冒泡。

控制項可以通過從基類 system.web.ui.control 繼承的兩個方法參與事件冒泡。這兩個方法是:onbubbleevent 和 raisebubbleevent。以下**片段顯示了這些方法的簽名。

code:

[ctrl+a select all]

raisebubbleevent 的實現是由 control 提供的,並且不能被重寫。raisebubbleevent 沿層次結構向上將事件資料傳送到控制項的父級。若要處理或引發冒泡的事件,控制項必須重寫 onbubbleevent 方法。

使事件冒泡的控制項執行以下三種操作之一。

控制項不執行任何操作,此時事件自動向上冒泡到其父級。

控制項進行一些處理並繼續使事件冒泡。若要實現這一點,控制項必須重寫 onbubbleevent,並從 onbubbleevent 呼叫 raisebubbleevent。以下**片段(摘自模板化資料繫結控制項示例)在檢查事件引數的型別後使事件冒泡。

code:

[ctrl+a select all]

控制項停止事件冒泡並引發和/或處理該事件。引發事件需要呼叫將事件排程給偵聽器的方法。若要引發冒泡的事件,控制項必須重寫 onbubbleevent 以呼叫引發此冒泡的事件的 oneventname 方法。引發冒泡的事件的控制項通常將冒泡的事件公開為頂級事件。以下**片段(摘自模板化資料繫結控制項示例)引發乙個冒泡的事件。

code:

[ctrl+a select all]

有關說明事件冒泡的示例,請參見事件冒泡控制項示例和模板化資料繫結控制項示例。

注意雖然啟用事件冒泡的方法 onbubbleevent 符合用於引發事件的方法的標準 .net framework 命名模式,但是沒有名為 bubbleevent 的事件。在停止事件冒泡的控制項中,將冒泡事件公開為頂級事件。例如,datalist 控制項將其模板中控制項的 command 事件公開為 itemcommand 事件。另請注意,在 .net framework 中 oneventname 方法的標準簽名有乙個引數 (protected void oneventname (eventargs e))。但是,onbubbleevent 有兩個引數,這是因為該事件起源於控制項之外;第二個引數提供源。

到目前為止,本討論說明了控制項如何響應冒泡的事件。下面一節顯示如何創作乙個定義冒泡的事件的控制項。

定義冒泡的事件

如果希望控制項為它所定義的事件啟用事件冒泡,則控制項必須從引發該事件的 oneventname 方法呼叫 raisebubbleevent。不需要在該控制項中做額外的工作。以下**片段顯示了乙個控制項,該控制項定義了乙個啟用冒泡的 command 事件。

code:

[ctrl+a select all]

注意事件冒泡並不限於命令事件。可以使用此處描述的機制使任何事件冒泡。

請參見 事件冒泡控制項示例 | 模板化資料繫結控制項示例

事件冒泡控制項示例

下面的自定義控制項 eventbubbler 說明了一種簡單的事件冒泡情況。eventbubbler 是乙個包含文字框 (textbox)、按鈕 (button) 和標籤 (label) 控制項的復合控制項。eventbubbler 將命令事件從按鈕冒泡到父容器控制項(自身),並將它們公開為頂級事件。若要生成該示例,請參見伺服器控制項示例中的說明。

有關更切合實際的示例,請參見模板化資料繫結控制項示例。

code:

[ctrl+a select all]

在頁上使用事件冒泡控制項

下面的 asp.net 頁使用自定義事件冒泡控制項 eventbubbler,並將事件處理程式附加到其頂級事件。

code:

[ctrl+a select all]

as3 冒泡事件示例。

package private function oncontainerroll e mouseevent void private function onchilddown1 e mouseevent void 事件機制 三個階段 捕獲階段 目標階段 冒泡階段。但不是所有事件都有這三個階段,例如t...

事件冒泡,事件捕獲

js事件流中有一種事件被稱為 冒泡事件 當乙個元素被觸發乙個事件時,該目標元素上的事件會優先被執行,然後向外傳播到每個祖先元素,恰如水裡的乙個泡泡似的,從產生就一直往上冒,到達水平面時,它才消失。在這個過程中,如果你只希望觸發目標元素上的事件,而不想它傳播到祖先元素上去,那麼你需要在 泡泡 離開物件...

事件捕獲 事件冒泡

body div id div1 div id div2 div id div3 div div div body script window.onload function odiv1.onclick fn1 odiv2.onclick fn1 odiv3.onclick fn1 false 冒泡...