定義:javascript
0級DOMjava
分爲2個:一是在標籤內寫onclick事件dom
二是在JS寫onlicke=function(){}函數函數
1)spa
<input id="myButton" type="button" value="Press Me" onclick="alert('thanks');" >
2).net
document.getElementById("myButton").onclick = function () { alert('thanks'); }
2級DOMcode
只有一個:監聽方法,原生有兩個方法用來添加和移除事件處理程序:addEventListener()和removeEventListener()。htm
它們都有三個參數:第一個參數是事件名(如click);blog
第二個參數是事件處理程序函數;事件
第三個參數若是是true則表示在捕獲階段調用,爲false表示在冒泡階段調用。
document.getElementById("myTest").attachEvent("onclick", function(){alert(1)});
//等價於
document.getElementById("myTest").addEventListener("click", function(){alert(1)}, false);
只有2級DOM包含3個事件:事件捕獲階段、處於目標階段和事件冒泡階段
<span> <a></a> </span>
點擊a後capturing(捕捉)階段事件傳播會從document-> span->a,而後發生在a,最後bubbling(冒泡)階段事件傳播會從a->span->document 。
區別:若是定義了兩個dom0級事件,dom0級事件會覆蓋
dom2不會覆蓋,會依次執行
dom0和dom2能夠共存,不互相覆蓋,可是dom0之間依然會覆蓋
dom0級事件
<a href=
"#"
id=
"hash"
onclick=
"fn();fn();"
>
<button type=
"button"
>返回上面進行開通</button>
</a>
var
btn=$(
'#hash'
).get();
btn.onclick=
function
(){
alert(
'111'
);
};
btn.onclick=
function
(){
alert(
'222'
);
};
像上面把onclick寫在標籤內,都是dom0級事件,fn和fn1依次執行; 第二種獲取元素,綁定onclick事件也是dom0級,第二個會覆蓋第一個onclick,也會覆蓋行內的onclick,只會彈出222。
dom2級事件
1
2
3
4
5
6
7
8
9
10
11
12
|
$(
'#hash'
).click(
function
(){
alert(
'jq的dom2級點擊第一次'
)
});
$(
'#hash'
).click(
function
(){
alert(
'jq的dom2級點擊第二次'
)
});
btn.addEventListener(
'click'
,
function
(){
alert(
'原生dom2級第一次click'
)
},
false
);
btn.addEventListener(
'click'
,
function
(){
alert(
'原生dom2級第二次click'
)
},
false
)
|
以上的綁定都屬於dom2級事件綁定,前面兩種都是jq的綁定方式,後面都是原生js的綁定方式,不會覆蓋,會依次執行jq的綁定方法和原生的綁定方法,這就是於dom0級的去別處;
dom0和dom2共存
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
<a href=
"#"
id=
"hash"
onclick=
"fn();fn1();"
>
<button type=
"button"
>返回上面進行開通</button>
</a>
<script type=
"text/javascript"
>
function
fn(){
alert(
'ade'
);
}
function
fn1(){
alert(
'ade111'
);
}
var
btn=$(
'#hash'
).get(0);
btn.onclick=
function
(){
alert(
'111'
);
};
$(
'#hash'
).click(
function
(){
alert(
'jq的dom2級點擊第一次'
)
});
btn.addEventListener(
'click'
,
function
(){
alert(
'原生dom2級第一次click'
)
},
false
);
</script>
|
上面的例子有一個兩個dom0級和兩個dom2級綁定事件,js裏面寫的dom0級會覆蓋行內的fn和fn1方法,可是js裏面的dom0能夠喝dom2共存,結果是彈出111 jq的dom2級點擊第一次 原生dom2級第一次click;