事件處理程序

事件就是用戶或?yàn)g覽器自身執(zhí)行的某種操作哥力。為時(shí)間指定處理程序的方式有以下幾種:

  • HTML事件處理程序
  • DOM0級(jí)事件處理程序
  • DOM2級(jí)事件處理程序
  • IE事件處理程序

HTML事件處理程序

直接在元素中定義事件處理程序唇敞,事件處理程序可以包含要執(zhí)行的操作筋栋,也可以調(diào)用在頁(yè)面其他地方定義的腳本

//直接在事件處理程序中包含
<input type="button" value="click me" onclick="alert('clicked')"/>
//調(diào)用其他地方定義的腳本
<script>
     function showMessage(){
        alert('clicked');
     }
</script>
<input type="button" value="click me" onclick="showMessage()"/>

缺點(diǎn):

  1. 存在時(shí)差問題,如果函數(shù)是在頁(yè)面最底部定義举户,用戶在js代碼還未解析時(shí)出發(fā)相應(yīng)事件烤宙,就會(huì)引發(fā)錯(cuò)誤。為此很多HTML事件處理程序都會(huì)被封裝在一個(gè)try-catch塊中俭嘁,以便錯(cuò)誤不會(huì)被顯示出來。
  2. html代碼和js代碼緊密耦合服猪,若要更換事件處理程序供填,則要改動(dòng)html代碼和js代碼。

DOM0級(jí)事件處理程序

通過js指定事件處理程序的傳統(tǒng)方式罢猪,就是把一個(gè)函數(shù)賦值給一個(gè)事件處理程序近她。(要使用這種方式,必須獲得要操作的對(duì)象的引用)

var btn = document.getElementById("myBtn");
btn.onclick = function(){
    alert("clicked");
}

使用DOM0級(jí)方法指定的事件處理程序被認(rèn)為是元素的方法膳帕。因此粘捎,事件處理程序是在元素的作用中運(yùn)行,就是說程序中this指向當(dāng)前元素危彩。

var btn = document.getElementById("myBtn");
btn.onclick = function(){
    alert(this.id);    //"myBtn"
}

刪除這種形式綁定的事件處理程序攒磨,只需要將事件處理程序的的值設(shè)置為null。

DOM2級(jí)事件處理程序

  • addEventListener()用于指定事件處理程序
  • removeEventListener()用于移除用addEventListener()指定的事件處理程序

它們都接受三個(gè)參數(shù):要綁定的事件名稱汤徽,處理函數(shù)和一個(gè)布爾值娩缰。
布爾值為true,則事件處理程序在捕獲階段觸發(fā)谒府,為false則在事件冒泡階段觸發(fā)拼坎。與DOM0級(jí)一樣浮毯,事件處理程序是在元素的作用域內(nèi)運(yùn)行,就是說程序中this指向當(dāng)前元素

var btn = document.getElementById("myBtn");
var handler = function(){  alert("clicked"  };
//指定事件處理程序
btn.addEventListener("click", handler, false);
//移除事件處理程序
btn.removeEventListener("click", handler, false);

注意:移除時(shí)事件處理程序函數(shù)必須與指定的函數(shù)相同
優(yōu)點(diǎn):可以添加多個(gè)事件處理程序泰鸡,會(huì)按照添加它們的順序觸發(fā)

IE事件處理程序

  • attachEvent()用于指定事件處理程序
  • detachEvent()用于移除事件處理程序

它們都接受兩個(gè)參數(shù):要綁定的事件名稱债蓝,處理函數(shù)。
因?yàn)镮E8及更早版本只支持事件冒泡盛龄,所以通過attachEvent()添加的事件處理程序都會(huì)被添加到冒泡階段惦蚊。
不同于DOM0級(jí)和DOM2級(jí),事件處理程序是在元素的作用域內(nèi)運(yùn)行讯嫂。使用attachEvent()指定事件處理程序蹦锋,事件處理程序會(huì)在全局作用域中運(yùn)行,即this指向window欧芽。
特點(diǎn):可以為一個(gè)元素添加多個(gè)事件處理程序莉掂,但是觸發(fā)順序和添加順序相反。

跨瀏覽器的事件處理程序

function addHandler(element, type, handler){
    if(element.addEventListener){
        element.addEventListner(type, handler, false);
    }else if(element.attachEvent){
        element.addtachEvent('on' + type, handler);
    }else{
        element['on' + type] = handler;
    }
}
function removeHandler(element, type, handler){
    if(element.removeEventListener){
        element.removeEventListner(type, handler, false);
    }else if(element.detachEvent){
        element.detachEvent('on' + type, handler);
    }else{
        element['on' + type] = handler;
    }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末千扔,一起剝皮案震驚了整個(gè)濱河市憎妙,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌曲楚,老刑警劉巖厘唾,帶你破解...
    沈念sama閱讀 207,113評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異龙誊,居然都是意外死亡抚垃,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門趟大,熙熙樓的掌柜王于貴愁眉苦臉地迎上來鹤树,“玉大人,你說我怎么就攤上這事逊朽『辈” “怎么了?”我有些...
    開封第一講書人閱讀 153,340評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵叽讳,是天一觀的道長(zhǎng)追他。 經(jīng)常有香客問我,道長(zhǎng)岛蚤,這世上最難降的妖魔是什么邑狸? 我笑而不...
    開封第一講書人閱讀 55,449評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮灭美,結(jié)果婚禮上推溃,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好铁坎,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評(píng)論 5 374
  • 文/花漫 我一把揭開白布蜂奸。 她就那樣靜靜地躺著,像睡著了一般硬萍。 火紅的嫁衣襯著肌膚如雪扩所。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,166評(píng)論 1 284
  • 那天朴乖,我揣著相機(jī)與錄音祖屏,去河邊找鬼。 笑死买羞,一個(gè)胖子當(dāng)著我的面吹牛袁勺,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播畜普,決...
    沈念sama閱讀 38,442評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼期丰,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了吃挑?” 一聲冷哼從身側(cè)響起钝荡,我...
    開封第一講書人閱讀 37,105評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎舶衬,沒想到半個(gè)月后埠通,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,601評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡逛犹,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評(píng)論 2 325
  • 正文 我和宋清朗相戀三年端辱,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片圾浅。...
    茶點(diǎn)故事閱讀 38,161評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡掠手,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出狸捕,到底是詐尸還是另有隱情,我是刑警寧澤众雷,帶...
    沈念sama閱讀 33,792評(píng)論 4 323
  • 正文 年R本政府宣布灸拍,位于F島的核電站,受9級(jí)特大地震影響砾省,放射性物質(zhì)發(fā)生泄漏鸡岗。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評(píng)論 3 307
  • 文/蒙蒙 一编兄、第九天 我趴在偏房一處隱蔽的房頂上張望轩性。 院中可真熱鬧,春花似錦狠鸳、人聲如沸揣苏。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)卸察。三九已至脯厨,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間坑质,已是汗流浹背合武。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評(píng)論 1 261
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留涡扼,地道東北人稼跳。 一個(gè)月前我還...
    沈念sama閱讀 45,618評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像吃沪,于是被迫代替她去往敵國(guó)和親汤善。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評(píng)論 2 344

推薦閱讀更多精彩內(nèi)容

  • ??JavaScript 與 HTML 之間的交互是通過事件實(shí)現(xiàn)的。 ??事件抹镊,就是文檔或?yàn)g覽器窗口中發(fā)生的一些特...
    霜天曉閱讀 3,473評(píng)論 1 11
  • 一锉屈、事件流 1.1 事件流 事件流:從頁(yè)面中接受事件的順序 事件冒泡:即事件開始時(shí)由最具體的元素(文檔中嵌套層次最...
    范小飯_閱讀 1,060評(píng)論 1 9
  • 事件就是用戶或?yàn)g覽器自身執(zhí)行的某種動(dòng)作,例如click垮耳、load等颈渊,都是事件的名字,響應(yīng)事件的函數(shù)叫做事件處理程序...
    陸lmj閱讀 396評(píng)論 0 0
  • 事件處理程序 事件就是用戶或?yàn)g覽器自身執(zhí)行的某種動(dòng)作终佛,而響應(yīng)某個(gè)事件的函數(shù)就叫做事件處理程序俊嗽。 1、HTML 事件...
    shanruopeng閱讀 232評(píng)論 0 0
  • 小林做房地產(chǎn)銷售半年的時(shí)間,最近有一個(gè)50來歲的老板客戶問他:“今年有沒有可以交的期房牙捉,孩子要上學(xué)竹揍?其次又說孩子是...
    一顆奔騰的心I閱讀 902評(píng)論 0 2