三種事件模型:原始事件模型(dom0),dom2事件模型,ie事件模型;
不同點:
事件程式的註冊(給html元素所對應的js物件繫結事件)
事件傳播的過程
事件模型的註冊:
一、原始事件模型(沒有相容性問題)
原始事件模型的特點:
事件型別上面有on(onclick)
沒有事件的傳播(事件一旦發生就立刻呼叫事件控制代碼)
乙個dom物件只能註冊乙個型別的事件,如果註冊了兩個,則會發生覆蓋,只執行後乙個事件;
註冊:
1、將js**作為html的性質(也就是直接在標籤中將html元素的性質設定為一段**)
<input
type
="button"
value
="press me"
onclick
="alert('thanks');"
2、將事件處理程式作為js物件的屬性
<form
name
="f1"
>
<
input
name
="b1"
type
="button"
value
="press me"
/>
form
>
document.f1.b1.onclick=function顯示呼叫:document.myfrom.onsubmit();()
; 或者function
plead()
document.f1.bi.onmouseover=plead;
(注意沒有括號)
或者
解除:
將null複製給事件函式:
document.getelementbyid('click'_).onclick = null;
瀏覽器可以對每個事件執行預設的動作:
–submit按鈕預設行為是提交表單。
–超連結的預設行為是向指定資源發起請求。
-reset按鈕預設行為是重置。。
-click單選按鈕或核取方塊點選設定。
-keydown使用者按下按鈕。
-mousedown滑鼠按下。
阻止預設動作:
事件處理程式可以通過返回false來阻止瀏覽器的預設行為
help
二:dom2級(ie8以下不支援)
主要特點:有乙個事件的傳播過程
事件捕獲:事件由document物件一直向下捕捉到目標元素
事件執行:目標物件的事件處理程式執行
事件冒泡:事件從目標元素上公升到document
所有事件型別都會經歷第一階段,有的事件不會經歷第三階段(submit)
特點二:
乙個dom物件可以註冊多個相同型別的事件,不會發生事件的覆蓋,會依次的執行各個事件函式。
eg:定義兩個盒子,outer包含inner,給inner可繫結兩個click事件,新增false表明在冒泡階段呼叫函式,則先執行inner的click函式,再執行outer的click函式。
因為點選了裡面的div後事件會經歷三個階段(document——outer——inner——document)
<div
id = 'outer'
style
= 'margin:
100px 0 0 100px; width: 200px;height: 200px; background: red;'
>
<
div
id="inner"
style
= 'margin-left:20px;
width: 50px;height:50px; background: green;'
>
div>
div>
<
script
>
varclick
=document.getelementbyid(
'inner');
click.addeventlistener(
'click',
function
(),false
); click.addeventlistener(
'click',
function
(),false
);script
>
註冊:
[object].addeventlistener('事件名稱',方法名(函式),事件模型(true/false))
解除:
[object].removeeventlistener('事件名稱',方法名(函式),事件模型(true/false))
true/false決定在那個階段呼叫函式
true:捕獲
false:冒泡
停止傳播:event.stoppropagation()
如果我們給outer和inner都註冊了click事件但是我不希望outer執行怎麼辦呢?
<script
>
varclick
=document.getelementbyid(
'inner');
varclickouter
=document.getelementbyid(
'outer');
click.addeventlistener(
'click',
function
(event),
false
); clickouter.addeventlistener(
'click',
function
(),false
);script
>
阻止預設動作:event.preventdefault()
由於事件捕獲階段沒有可以阻止事件的函式,所以一般都是設定為事件冒泡。
三、ie模型
特點:event物件不是事件處理程式的函式引數,而是window的全域性變數
事件物件event:事件發生時產生的物件。封裝了跟事件相關的資訊。
–滑鼠資訊
–鍵盤資訊
ie得到的事件物件
div1.onclick = function()else
}
nginx事件模型小結
1.這是 yixiao的分析文章,這篇給出了nginx事件抽象模型的基礎構建,為事件迴圈的正是運作打基礎。2.來自yixiao的第二篇事件分析文章,在1的基礎上,分析了實際運作的事件處理迴圈。這是乙個抽象的模型,底層可能是epoll,kqueue等來具體驅動。3.來自yixiao的第三篇文章,這是乙...
nginx事件模型小結
1.這是 yixiao的分析文章,這篇給出了nginx事件抽象模型的基礎構建,為事件迴圈的正是運作打基礎。2.來自yixiao的第二篇事件分析文章,在1的基礎上,分析了實際運作的事件處理迴圈。這是乙個抽象的模型,底層可能是epoll,kqueue等來具體驅動。3.來自yixiao的第三篇文章,這是乙...
js事件模型
事件模型主要分為3種 原始事件模型 dom2事件模型 ie事件模型。1.原始事件模型 dom0級 這是一種被所有瀏覽器都支援的事件模型,對於原始事件而言,沒有事件流,事件一旦發生將馬上進行處理,有兩種方式可以實現原始事件 1 在html 中直接指定屬性值 2 在js 中為 document.gete...