明輝手游網(wǎng)中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

DHTML對象模型(About the DHTML Object Model)(3)

[摘要]禁止事件: 所有的事件都將向它們的父級元素冒泡,而且除非冒泡過程中事件被禁止了,否則事件將會被遞歸地沿著層次結(jié)構(gòu)的路徑最后上浮到文檔對象(document object)。要禁止一個事件,你必須在事件句柄中把window.event.cancelBubble屬性的值設(shè)為“true”。注意一點,除非...

禁止事件:
所有的事件都將向它們的父級元素冒泡,而且除非冒泡過程中事件被禁止了,否則事件將會被遞歸地沿著層次結(jié)構(gòu)的路徑最后上浮到文檔對象(document object)。要禁止一個事件,你必須在事件句柄中把window.event.cancelBubble屬性的值設(shè)為“true”。注意一點,除非事件被禁止了,否則,在沿著層次結(jié)構(gòu)冒泡的過程中,它將會被所有注冊了這個事件句柄的父級元素處理,即使它已經(jīng)在子級元素中被處理過了。

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

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

<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對象上移動鼠標指針,事件將會以下面的順序激發(fā):

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

有些時候,網(wǎng)頁制作者可能會想去探測鼠標指針何時移出一個div對象以實現(xiàn)某種

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

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

(例子的超級鏈接:

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對象移進與其內(nèi)部接壤的img對象而激發(fā)的,即:鼠標指針是真正的離開了整個OuterDiv包含的區(qū)域(譯者注)*/
{
alert("Out Now");
}
}
</SCRIPT>

</BODY>