JS事件模型小結

2022-03-09 06:56:54 字數 3706 閱讀 4851

三種事件模型:原始事件模型(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

()

; 或者function

plead()

document.f1.bi.onmouseover=plead;

(注意沒有括號)

或者

顯示呼叫:document.myfrom.onsubmit();  

解除:

將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...