欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Javascript 的addEventListener()及attachEvent()區(qū)別分析

 更新時(shí)間:2009年05月21日 02:54:23   作者:  
大家都知道事件的用法就是當(dāng)某個(gè)事件(狀況)被觸發(fā)了之后就會(huì)去執(zhí)行某個(gè)Function, 尤其是Javascript, 在當(dāng)紅AJAX的催化下, 了解Javascript的Event用法更加重要, 在這里就大概介紹一下avascript的Event用法.
Mozilla中:

addEventListener的使用方式:

target.addEventListener(type, listener, useCapture);

target: 文檔節(jié)點(diǎn)、document、window 或 XMLHttpRequest。
type: 字符串,事件名稱,不含“on”,比如“click”、“mouseover”、“keydown”等。
listener :實(shí)現(xiàn)了 EventListener 接口或者是 JavaScript 中的函數(shù)。
useCapture :是否使用捕捉,一般用 false 。例如:document.getElementById("testText").addEventListener("keydown", function (event) { alert(event.keyCode); }, false);

IE中:

target.attachEvent(type, listener);
target: 文檔節(jié)點(diǎn)、document、window 或 XMLHttpRequest。
type: 字符串,事件名稱,含“on”,比如“onclick”、“onmouseover”、“onkeydown”等。
listener :實(shí)現(xiàn)了 EventListener 接口或者是 JavaScript 中的函數(shù)。 例如:document.getElementById("txt").attachEvent("onclick",function(event){alert(event.keyCode);});

W3C 及 IE 同時(shí)支持移除指定的事件, 用途是移除設(shè)定的事件, 格式分別如下:

W3C格式:

removeEventListener(event,function,capture/bubble);

Windows IE的格式如下:

detachEvent(event,function);


target.addEventListener(type, listener, useCapture);
target 文檔節(jié)點(diǎn)、document、window 或 XMLHttpRequest。
type 字符串,事件名稱,不含“on”,比如“click”、“mouseover”、“keydown”等。
listener 實(shí)現(xiàn)了 EventListener 接口或者是 JavaScript 中的函數(shù)。
useCapture 是否使用捕捉,看了后面的事件流一節(jié)后就明白了,一般用 false
事件觸發(fā)時(shí),會(huì)將一個(gè) Event 對象傳遞給事件處理程序,比如:
document.getElementById("testText").addEventListener("keydown", function (event) { alert(event.keyCode); }, false);
適應(yīng)的瀏覽器版本不同,同時(shí)在使用的過程中要注意
attachEvent方法 按鈕onclick IE中使用
addEventListener方法 按鈕click fox中使用
兩者使用的原理:可對執(zhí)行的優(yōu)先級不一樣,下面實(shí)例講解如下:
attachEvent方法,為某一事件附加其它的處理事件。(不支持Mozilla系列)
addEventListener方法 用于 Mozilla系列
舉例: document.getElementById("btn").onclick = method1;
document.getElementById("btn").onclick = method2;
document.getElementById("btn").onclick = method3;如果這樣寫,那么將會(huì)只有medhot3被執(zhí)行
寫成這樣:
var btn1Obj = document.getElementById("btn1"); //object.attachEvent(event,function);
btn1Obj.attachEvent("onclick",method1);
btn1Obj.attachEvent("onclick",method2);
btn1Obj.attachEvent("onclick",method3);執(zhí)行順序?yàn)閙ethod3->method2->method1
如果是Mozilla系列,并不支持該方法,需要用到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);執(zhí)行順序?yàn)閙ethod1->method2->method3
實(shí)例:(要注意的是div必須放到j(luò)s前面才行)
復(fù)制代碼 代碼如下:

<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;">點(diǎn)擊</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>

從W3C的發(fā)展時(shí)間軸來看, DOM(Document Object Model)的模型可以分為兩種, DOM 0 及 DOM 2. 從數(shù)字來看就可以知道DOM 0 當(dāng)然是比較舊的協(xié)議, 我們可以從以下的表格來看:

DOM1 協(xié)定:

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 的進(jìn)化:

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

 新的DOM2 用法可以addEventListener()這個(gè)函數(shù)來觀察到:

addEventListener(event,function,capture/bubble);

參數(shù)event如上表所示, function是要執(zhí)行的函數(shù), capture與bubble分別是W3C制定得兩種時(shí)間模式,簡單來說capture就是從document的開始讀到最后一行, 再執(zhí)行事件, 而bubble則是先尋找指定的位置再執(zhí)行事件.
capture/bubble的參數(shù)是布爾值, True表示用capture, False則是bubble.Windows Internet Explorer也有制定一種EventHandler, 是 attachEvent(), 格式如下:

window.attachEvent(”submit”,myFunction());

比較特別的是attachEvent不需要指定capture/bubble的參數(shù), 因?yàn)樵趙indows IE環(huán)境下都是使用Bubble的模式.這里用圖像的Rollover例子來表現(xiàn)事件的用法:

<!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01//EN”
http://www.w3.org/TR/html4/strict.dtd“>
<html>
<head>
<title>Rollover</title>
<script type=”text/javascript”>function moveOver(imgObj) {
  if (typeof window.addEventListener != “undefined”) {
  imgObj.addEventListener(”mouseover”,function(){imgObj.src = imgObj.id +
“_over.png”;}, false);
  imgObj.addEventListener(”mouseout”, function(){imgObj.src = imgObj.id +
“_default.png”;}, false);
  } else {
  imgObj.attachEvent(”onmouseover”,function(){imgObj.src = imgObj.id +
“_over.png”;});
  imgObj.attachEvent(”onmouseout”, function(){imgObj.src = imgObj.id +
“_default.png”;});
  }
}

function rollover() {
var images = document.getElementsByTagName(”img”);
var roll = new RegExp (”rollover”);
var preload = [];
for (var i = 0; i < images.length; i++) {
  if (images[i].id.match(roll)) {
  preload[i] = new Image();
  preload[i].src = images[i].id + “_over.png”;

  moveOver(images[i]);
  }
}
}
if (typeof window.addEventListener != “undefined”) {
  window.addEventListener(”load”,rollover,false);
} else {
  window.attachEvent(”onload”,rollover)
}
</script>
</head>
<body>
<p><img id=”rollover_home” name=”img_home” src=”rollover_home_default.png”
alt=”Home”></p>
<p><img id=”rollover_about” name=”img_about” src=”rollover_about_default.png”
alt=”About”></p>
<p><img id=”rollover_blog” name=”img_blog” src=”rollover_blog_default.png”
alt=”Blog”></p>
<p><img id=”logo” name=”img_logo” src=”logo.png” alt=”Braingia Logo”></p>
</body>
</html>

上述的 typeof window.addEventListener != “undefined” 程序代碼可以判斷使用者的瀏覽器是否支持AddEventListener這個(gè)事件模型, 如果不支持就使用attachEvent.

W3C 及 IE 同時(shí)支持移除指定的事件, 用途是移除設(shè)定的事件, 格式分別如下:

W3C格式:

removeEventListener(event,function,capture/bubble);

Windows IE的格式如下:

detachEvent(event,function);

數(shù)據(jù)參考: Chapter 14 - Browsers and JavaScript, JavaScript Step by Step, by Steve Suehring

相關(guān)文章

  • fckeditor粘貼Word時(shí)彈出窗口取消的方法

    fckeditor粘貼Word時(shí)彈出窗口取消的方法

    這篇文章主要介紹了fckeditor粘貼Word時(shí)彈出窗口取消的方法,是應(yīng)用fckeditor時(shí)非常實(shí)用的技巧,需要的朋友可以參考下
    2014-10-10
  • bootstrap 日期控件 datepicker被彈出框dialog覆蓋的解決辦法

    bootstrap 日期控件 datepicker被彈出框dialog覆蓋的解決辦法

    這篇文章主要介紹了bootstrap 日期控件 datepicker被彈出框dialog覆蓋的解決辦法 ,本文給大家分享幾種解決方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-07-07
  • js如何獲取對象在數(shù)組中的index

    js如何獲取對象在數(shù)組中的index

    這篇文章主要介紹了js如何獲取對象在數(shù)組中的index,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • 使用webpack4編譯并壓縮ES6代碼的方法示例

    使用webpack4編譯并壓縮ES6代碼的方法示例

    這篇文章主要介紹了使用webpack4編譯并壓縮ES6代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • Layui給數(shù)據(jù)表格動(dòng)態(tài)添加一行并跳轉(zhuǎn)到添加行所在頁的方法

    Layui給數(shù)據(jù)表格動(dòng)態(tài)添加一行并跳轉(zhuǎn)到添加行所在頁的方法

    今天小編就為大家分享一篇Layui給數(shù)據(jù)表格動(dòng)態(tài)添加一行并跳轉(zhuǎn)到添加行所在頁的方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-08-08
  • 微信小程序進(jìn)行微信支付的步驟昂述

    微信小程序進(jìn)行微信支付的步驟昂述

    最近開發(fā)微信小程序進(jìn)入到支付階段,一直以來從事App開發(fā),所以支付流程還是熟記于心的。下面通過本文給大家講述下微信小程序進(jìn)行微信支付的步驟,需要的朋友可以參考下
    2016-12-12
  • 基于require.js的使用(實(shí)例講解)

    基于require.js的使用(實(shí)例講解)

    下面小編就為大家?guī)硪黄趓equire.js的使用(實(shí)例講解)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-09-09
  • 如何用JS WebSocket實(shí)現(xiàn)簡單聊天

    如何用JS WebSocket實(shí)現(xiàn)簡單聊天

    這篇文章主要介紹了如何用JS WebSocket實(shí)現(xiàn)簡單聊天,對websocket感興趣的同學(xué),可以參考下
    2021-05-05
  • 小程序跳轉(zhuǎn)到的H5頁面再跳轉(zhuǎn)回跳小程序的方法

    小程序跳轉(zhuǎn)到的H5頁面再跳轉(zhuǎn)回跳小程序的方法

    這篇文章主要介紹了小程序跳轉(zhuǎn)到的H5頁面再跳轉(zhuǎn)回跳小程序的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • uniapp中使用vuex并持久化的方法示例

    uniapp中使用vuex并持久化的方法示例

    vuex是基于vuex.js的狀態(tài)管理工具,可以把它理解為一個(gè)倉庫,下面這篇文章主要給大家介紹了關(guān)于uniapp中如何使用vuex并持久化的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-06-06

最新評論