這幾天一直在寫 原始事件模型 卻弄不清楚到底是什麼意思.今天上網查了查..總算略知一二..我把看到的東西拿過來給大家看看..
原位址:http://www.blogjava.net/dhcn/archive/2008/01/08/js_eventmodel_summary.html
作者: 簡單
[size=x-large]JS事件模型小結 [/size]
前幾天看dojo的文檔,其中多次提到DOM2事件模型,以前學習這部分的内容,主要憤慨于IE的不相容性了,現在對于DOM2事件模型的概念又有些模糊,是以翻出了JS權威指南(V4)又複習了一下,簡單作一小結。
JS權威指南中将JS事件模型分為四種
1、原始事件模型:屬性事件處理模式
2、标準事件模型:DOM2對其作了标準化
3、IE事件模型(IE5.5\IE6)
4、 Netscape事件模型
[size=large]原始事件模型 [/size]
也就是基本事件處理,其實我們大多數人使用的JS事件處理模式都是這種代碼方式。
其事件類型:分為"輸入事件(如onclicki)"和"語義事件(如onsubmit)"
事件程式的注冊可以以下幾種方式:
1、JS代碼作為HTML性質值
<input type="button" value="Press me" onclick="alert('thanks');"
2、事件處理程式作為JS屬性
附注:文檔中的每個HTML元素在文檔樹(DOM)中都有一個相應的JS對象,這個JS對象的屬性對應于那個HTML元素的性質,無論作為HTML性質的JS代碼還是作為JS屬性的時間處理程式,其本身的屬性都是函數"function".
作為JS屬性的例子:
html背景:
<form name="f1">
<input name="b1" type="button" value="Press Me"/>
</form>
第一種指派方式: 第二種指派方式:
function plead()
{
window.status="Please Press Me!";
}
document.f1.bi.onmouseover=plead;
作為JS屬性的事件處理程式可以用JS屬性顯式調用
document.myfrom.onsubmit();
事件處理程式可以傳回fale來阻止浏覽器執行事件的預設動作,常用的如對onsubmit的操作。例外是對超連結mouseover的window.status顯示事件的阻擋,是傳回true.
例如:
<a href="help.htm" target="_blank" rel="external nofollow" onmouseover="window.status='help';return true;">help</a>
JS函數運作在詞法作用域中,也就是定義他們的作用域中,是以作為HTML性質的JS事件處理程式,作用域鍊比較特殊,其頭是調用對象(既這段JS代碼),下一個對象是觸發事件的對象既event.currentTarget,其後就是其包容層元素。整個作用域鍊的精确構成依賴于具體實作。