DHTML對像模型(About the DHTML Object Model)(三)

- 中國WEB開發者網絡 (http://www.webasp.net)
-- 技術教程 (http://www.webasp.net/article/)
--- DHTML對像模型(About the DHTML Object Model)(三) (http://www.webasp.net/article/9/8123.htm)
-- 作者:未知
-- 發佈日期: 2004-02-28
禁止事件:
所有的事件都將向它們的父級元素冒泡,而且除非冒泡過程中事件被禁止了,否則事件將會被遞歸地沿著層次結構的路徑最後上浮到文檔對像(document object)。要禁止一個事件,你必須在事件句柄中把window.event.cancelBubble屬性的值設為「true」。注意一點,除非事件被禁止了,否則,在沿著層次結構冒泡的過程中,它將會被所有註冊了這個事件句柄的父級元素處理,即使它已經在子級元素中被處理過了。

禁止事件冒泡與禁止事件的默認行為是不同的。一些事件(例如:一個錨點上的onclick)具有默認行為。當一個錨點被單擊時,它默認的行為是把當前窗口導航到其src屬性所指定的URL。在事件句柄中返回「false」,或者設置window.event.returnValue屬性為「false」,可以禁止事件的默認行為,但不能禁止事件的向上冒泡。要禁止向上冒泡,只有把window.event.returnValue屬性設為「true」,相對應地,禁止事件冒泡的設置也並會禁止事件的默認行為。

最後一個例子是演示如何利用事件冒泡將一個共同的效果應用到一組元素上的。若你想把其中一個元素排除在這個效果之外,只要簡單地把下面這行代碼,從:

<SPAN class=Item>Ham</SPAN>
修改為:

<SPAN class=Item onmouseover="window.event.cancelBubble = true;"
onmouseout="window.event.cancelBubble = true;">Ham</SPAN>
就可以了。

(例子的超級鏈接:

http://msdn.microsoft.com/workshop/samples/author/dhtml/overview/dom_03.htm )

進一步的思考:
在有些情況下,你可以讓一個onmouseover事件只註冊在一個對像上,考慮下面情況:

<DIV id=MyDiv>
<IMG id=MyImg>
</DIV>
假如你在img對像上移動鼠標指針,事件將會以下面的順序激發:

MyDiv:: onmouseover
MyDiv:: onmouseout
MyImg:: onmouseover
把你的鼠標指針從img對像上移開將會再次激發MyDiv::onmouseover事件。

有些時候,網頁製作者可能會想去探測鼠標指針何時移出一個div對像以實現某種

特別效果。這時,僅僅簡單地設置onmouseout事件就並不足夠了。為了使這種情況更容易解決,IE4.0標準為onmouseover和onmouseout事件增加了指示源對像(formElement)和目標對像(toElement)的屬性,你可以綜合使用這些屬性和容器的方法來辨別鼠標指針何時移出了一個區域。

下面的例子演示了如何使用這些屬性和方法:

(例子的超級鏈接:

http://msdn.microsoft.com/workshop/samples/author/dhtml/overview/dom_04.htm)

<HTML>
<BODY id=Body>
<DIV id=OuterDiv style="width: 100px; height: 50px; background: red"
onmouseover="over();" onmouseout="out();">
<IMG id=Img1>
<IMG id=Img2>
<IMG id=Img3>
</DIV>
<SCRIPT>
function over() {
var s;
s = "onmouseover: "+window.event.srcElement.id+" from: "+

window.event.fromElement.id+" to: "+window.event.toElement.id;
alert(s);
}

function out() {
var s;
s = "onmouseout: "+window.event.srcElement.id+" from: "+

window.event.fromElement.id+" to: "+window.event.toElement.id;
alert(s);

if (!(OuterDiv.contains(window.event.toElement)))
/*onmouseout事件並非由於鼠標指針從OuterDiv對像移進與其內部接壤的img對像而激發的,即:鼠標指針是真正的離開了整個OuterDiv包含的區域(譯者注)*/
{
alert("Out Now");
}
}
</SCRIPT>

</BODY>



webasp.net