HTML addEventListener和attachEvent的區別詳解
語法
element.addEventListener(event,function,useCapture)
引數值
引數 | 描述 |
---|---|
event | 必須。字串,指定事件名。 注意: 不要使用 "on" 字首。 例如,使用 "click" ,而不是使用 "onclick"。 提示: 所有 HTML DOM 事件,可以檢視我們完整的 HTML DOM Event 物件參考手冊。 |
function | 必須。指定要事件觸發時執行的函式。 當事件物件會作為第一個引數傳入函式。 事件物件的型別取決於特定的事件。例如, "click" 事件屬於 MouseEvent(滑鼠事件) 物件。 |
useCapture | 可選。布林值,指定事件是否在捕獲或冒泡階段執行。 可能值:
|
例項
您可以通過函式名來引用外部函式。
該例項演示了在使用者點選a <button> 元素時如何執行函式:
-
<span style="font-family:SimSun;"><span style="font-size:18px;">document.getElementById("myBtn").addEventListener("click", myFunction);
-
function myFunction() {
-
document.getElementById("demo").innerHTML = "Hello World";
-
}</span></span>
您可以在文件中新增許多事件,新增的事件不會覆蓋已存在的事件。
該例項演示瞭如何在<button>元素中新增兩個點選事件:
-
<span style="font-family:SimSun;"><span style="font-size:18px;">document.getElementById("myBtn").addEventListener("click", myFunction);
-
document.getElementById("myBtn").addEventListener("click", someOtherFunction);</span></span>
您可以在同一個元素中新增不同型別的事件。
該例項演示瞭如何在同一個 <button> 元素中新增多個事件:
-
<span style="font-family:SimSun;"><span style="font-size:18px;">document.getElementById("myBtn").addEventListener("mouseover", myFunction);
-
document.getElementById("myBtn").addEventListener("click", someOtherFunction);
-
document.getElementById("myBtn").addEventListener("mouseout", someOtherFunction);</span></span>
修改 <button> 元素的背景:
-
<span style="font-family:SimSun;"><span style="font-size:18px;">document.getElementById("myBtn").addEventListener("click", function(){
-
this.style.backgroundColor = "red";
-
});</span></span>
使用 removeEventListener() 方法移除由 addEventListener() 方法新增的事件控制程式碼:
// 新增 <div> 事件控制程式碼
<span style="font-family:SimSun;"><span style="font-size:18px;">document.getElementById("myDIV").addEventListener("mousemove", myFunction);</span></span>
// 移除 <div> 事件控制程式碼
<span style="font-family:SimSun;"><span style="font-size:18px;">document.getElementById("myDIV").removeEventListener("mousemove", myFunction);</span></span>
如果瀏覽器不支援 addEventListener() 方法, 你可以使用 attachEvent() 方法替代。
以下例項演示了跨瀏覽器的解決方法:
-
<span style="font-family:SimSun;"><span style="font-size:18px;">var x = document.getElementById("myBtn");
-
if (x.addEventListener) { //所有主流瀏覽器,除了 IE 8 及更早 IE版本
-
x.addEventListener("click", myFunction);
-
} else if (x.attachEvent) { // IE 8 及更早 IE 版本
-
x.attachEvent("onclick", myFunction);
-
}</span></span>
addEventListener() 方和attachEvent()區別
addEventListener(event,function,capture/bubble);
引數event如上表所示,
function是要執行的函式,
capture與bubble分別是W3C制定得兩種時間模式,
簡單來說capture就是從document的開始讀到最後一行, 再執行事件,
而bubble則是先尋找指定的位置再執行事件.
capture/bubble的引數是布林值, True表示用capture, False則是bubble.
Windows Internet Explorer( IE )也有制定一種EventHandler, 是 attachEvent(), 格式如下:
window.attachEvent(”submit”,myFunction());
比較特別的是attachEvent不需要指定capture/bubble的引數, 因為在windows IE環境下都是使用Bubble的模式.
Mozilla中:
addEventListener的使用方式:
target.addEventListener(type, listener, useCapture);
target: 文件節點、document、window 或 XMLHttpRequest。
type: 字串,事件名稱,不含“on”,比如“click”、“mouseover”、“keydown”等。
listener :實現了 EventListener 介面或者是 JavaScript 中的函式。
useCapture :是否使用捕捉,一般用 false 。例如:document.getElementById("testText").addEventListener("keydown", function (event) { alert(event.keyCode); }, false);
IE中:
target.attachEvent(type, listener);
target: 文件節點、document、window 或 XMLHttpRequest。
type: 字串,事件名稱,含“on”,比如“onclick”、“onmouseover”、“onkeydown”等。
listener :實現了 EventListener 介面或者是 JavaScript 中的函式。 例如:document.getElementById("txt").attachEvent("onclick",function(event){alert(event.keyCode);});
移除設定的事件, 格式分別如下:
W3C格式:
removeEventListener(event,function,capture/bubble);
Windows IE的格式如下:
detachEvent(event,function);
事件觸發時,會將一個 Event 物件傳遞給事件處理程式,比如:
document.getElementById("testText").addEventListener("keydown", function (event) { alert(event.keyCode); }, false);
適應的瀏覽器版本不同,同時在使用的過程中要注意
(1)attachEvent方法 按鈕onclick IE中使用
(2)addEventListener方法 按鈕click fox中使用
兩者使用的原理:可對執行的優先順序不一樣,下面例項講解如下:
(1)attachEvent方法,為某一事件附加其它的處理事件。(不支援Mozilla系列)
(2)addEventListener方法 用於 Mozilla系列
舉例:
-
<span style="font-family:SimSun;">document.getElementById("btn").onclick = method1;
-
document.getElementById("btn").onclick = method2;
-
document.getElementById("btn").onclick = method3;</span>
如果這樣寫,那麼將會只有medhot3被執行
寫成這樣:
-
<span style="font-family:SimSun;">var btn1Obj = document.getElementById("btn1"); //object.attachEvent(event,function);
-
btn1Obj.attachEvent("onclick",method1);
-
btn1Obj.attachEvent("onclick",method2);
-
btn1Obj.attachEvent("onclick",method3);</span>
執行順序為method3->method2->method1
如果是Mozilla系列,並不支援attachEvent該方法,需要用到
-
<span style="font-family:SimSun;">addEventListener var btn1Obj = document.getElementById("btn1");
-
//element.addEventListener(type,listener,useCapture);
-
btn1Obj.addEventListener("click",method1,false);
-
btn1Obj.addEventListener("click",method2,false);
-
btn1Obj.addEventListener("click",method3,false);</span>
執行順序為method1->method2->method3
例項:(要注意的是div必須放到js前面才行)
-
<span style="font-family:SimSun;"><html>
-
<head>
-
</head>
-
<body>
-
<div id="name1" style="border:1px solid red;padding:10px 10px 10px 10px;" style="border:1px solid red;padding:10px 10px 10px 10px;">
-
<div id="name2" style="border:1px solid green;padding:10px 10px 10px 10px;" style="border:1px solid green;padding:10px 10px 10px 10px;">點選</div>
-
</div>
-
<div id="info"></div>
-
<script type="text/javascript"><!--
-
var name1=document.getElementById('name1'); //要注意
-
var name2=document.getElementById('name2'); //要注意
-
var info=document.getElementById('info');
-
if(name1.attachEvent){ //對於attachEvent前面的target我們一定要保證不為空
-
name1.attachEvent('onclick',function () { info.innerHTML += "紅色" + "<br>"; });
-
name2.attachEvent('onclick',function () { info.innerHTML += "綠色" + "<br>"; });
-
}else{
-
name1.addEventListener('click',function () { info.innerHTML += "紅色" + "<br>"; },false);
-
name2.addEventListener('click',function () { info.innerHTML += "綠色" + "<br>"; },false);
-
}
-
// --></script>
-
</body>
-
</html> </span>
DOM(Document Object Model)的模型可以分為兩種, DOM 0 及 DOM 2. 從數字來看就可以知道DOM 0 當然是比較舊的協議, 我們可以從以下的表格來看:
DOM1 協定:
|
|
Event Name |
Description |
onblur() |
The element has lost focus (that is, it is not selected by the user). |
onchange0 |
The element has either changed (such as by typing into a text field) or the element has lost focus. |
onclick0 |
The mouse has been clicked on an element. |
ondblclick() |
The mouse has been double-clicked on an element. |
onfocus() |
The element has gotten focus. |
onkeydown() |
A keyboard key has been pressed down (as opposed to released) while the element has focus. |
onkeypress() |
A keyboard key has been pressed while the element has focus. |
onkeyup() |
A keyboard key has been released while the element has focus. |
onload() |
The element has loaded (document, frameset, or image). |
onmousedown() |
A mouse button has been pressed. |
onmousemove() |
The mouse has been moved. |
onmouseout() |
The mouse has been moved off of or away from an element. |
onmouseover() |
The mouse has moved over an element. |
onmouseup() |
A mouse button has been released. |
onreset() |
The form element has been reset, such as when a form reset button is pressed. |
onresize() |
The window's size has been changed. |
onselect() |
The text of a form element has been selected. |
onsubmit() |
The form has been submitted. |
onunload() |
The document or frameset has been unloaded. |
DOM2 的進化:
DOM 0 Event |
DOM 2 Event |
onblur() |
blur |
onfocus() |
focus |
onchange() |
change |
onmouseover() |
mouseover |
onmouseout() |
mouseout |
onmousemove() |
mousemove |
onmousedown() |
mousedown |
onmouseup() |
mouseup |
onclick() |
click |
ondblclick() |
dblclick |
onkeydown() |
keydown |
onkeyup() |
keyup |
onkeypress() |
keypress |
onsubmit() |
submit |
onload() |
load |
onunload() |
unload |
參考:http://www.runoob.com/jsref/met-element-addeventlistener.html
相關文章
- js 新增事件 attachEvent 和 addEventListener 的用法JS事件dev
- HTML5標籤HTMLCollection和NodeList的區別詳解HTML
- MyBatis中#{}和${}的區別詳解MyBatis
- cookie 和session 的區別詳解CookieSession
- Redis 和 Memcached 的區別詳解Redis
- Cookie和Session的區別詳解CookieSession
- java和html的區別JavaHTML
- JRE 和 JDK 的區別詳解JDK
- cookie和session的詳解與區別CookieSession
- Java NIO 和 IO 的區別詳解Java
- 詳解CALayer 和 UIView的區別和聯絡UIView
- jQuery的html()和text()區別jQueryHTML
- CountDownLatch和CyclicBarrier區別及詳解CountDownLatch
- Html5 canvas中width、height和style的寬高區別詳解HTMLCanvas
- rem與em的使用和區別詳解REM
- DeFi和CeFi的區別詳細講解
- C++ new A 和 new A() 的區別詳解C++
- HTML5和HTML4的區別HTML
- text/html和text/plain的區別HTMLAI
- viewflow在html和body的區別ViewHTML
- outline和border區別詳解
- JavaScript 中 Property 和 Attribute 的區別詳解JavaScript
- GridView 中 Bind和Eval的區別詳解View
- Python中none和null的區別詳解!PythonNoneNull
- JavaScript 基本資料型別和引用型別的區別詳解JavaScript資料型別
- 詳解展示元件和容器元件的區別和應用元件
- Linux中&&和&,|和||用法及區別詳解!Linux
- equals與==的區別(詳解)
- JQuery中html()和val()的用法區別jQueryHTML
- 詳解 Gulp4 和 Gulp3 的區別
- 深入Oracle的left join中on和where的區別詳解Oracle
- XML和HTML的主要區別、 jQuery 能做什麼?JavaScript中的“=、==、===”區別?XMLHTMLjQueryJavaScript
- 詳解iframe與frame的區別
- Golang make和new的區別及實現原理詳解Golang
- html塊元素和內斂元素的區別HTML
- HashMap和Hashtable的詳細區別HashMap
- HTML4 和 HTML5的10個關鍵區別HTML
- python基礎(8)python中is和==的區別詳解Python