Js on及addEventListener原理用法區(qū)別解析
一.首先介紹兩者的用法:
1.on的用法:以onclick為例
第一種:
obj.onclick = function(){ //do something.. }
第二種:
obj.onclick= fn; function fn (){ //do something... }
第三種:當(dāng)函數(shù)fn有參數(shù)的情況下使用匿名函數(shù)來傳參:
obj.onclick = function(){fn(param)}; function fn(param){ //do something.. }
不能夠這樣寫:錯誤寫法:obj.onclick= fn(param):
因為這樣寫函數(shù)會立即執(zhí)行,不會等待點擊觸發(fā),特別注意一下
2.addEventListener的用法:
形式:
addEventListener(event,funtionName,useCapture)
參數(shù):
- event:事件的類型如 “click”
- funtionName:方法名
- useCapture(可選):布爾值,指定事件是否在捕獲或冒泡階段執(zhí)行。
- true - 事件句柄在捕獲階段執(zhí)行
- false- false- 默認(rèn)。事件句柄在冒泡階段執(zhí)行
寫法:
第一種:
obj.addEventListener("click",function(){ //do something }));
第二種,沒參數(shù)可以直接寫函數(shù)名
obj.addEventListener("click",fn,fasle)); function fn(){ //do something.. }
第三種:函數(shù)有參數(shù)時需要使用匿名函數(shù)來傳遞參數(shù)
obj.addEventListener("click",function(){fn(parm)},false);
二.兩者的區(qū)別
1.on事件會被后面的on的事件覆蓋
以onclick為例:
//obj是一個dom對象,下同//注冊第一個點擊事件 obj.onclick(function(){ alert("hello world"); }); //注冊第二個點擊事件 obj.onclick(function(){ alert("hello world too"); });
最終會只有彈框輸出:
hello world too
2.addEventListener 則不會覆蓋。
//注冊第一個點擊事件 obj.addEventListener("click",function(){ alert("hello world"); })); //注冊第二個點擊事件 obj.addEventListener("click",function(){ alert("hello world too"); }));
這樣會連續(xù)輸出:
hello world
hello world too
三.addEventListener注意事項:
1.特別說明addEventListener不被IE9以下兼容,IE9以下用使用attachEvent()
obj.attachEvent(event,funtionName);
參數(shù):
event:事件類型(需要寫成“onclick”前面加on,這個與addEventListener不同)
funtionName:方法名(要參數(shù)是也是需要使用匿名函數(shù)來傳參)
四.事件集合:
1.鼠標(biāo)事件:
- click(單擊)
- dbclick(雙擊)
- mousedown(鼠標(biāo)按下)
- mouseout(鼠標(biāo)移走)
- mouseover(鼠標(biāo)移入)
- mouseup(鼠標(biāo)彈起)
- mousemove(鼠標(biāo)移動)
2.鍵盤事件:
- keydown(鍵按下)
- keypress(按鍵)
- keyup(鍵起來)
- 3.HTML事件:
- load(加載頁面)
- unload(卸載離開頁面)
- change(改變內(nèi)容)
- scroll(滾動)
- focus(獲得焦點)
- blur(失去焦點)
五.總結(jié):
onXXX與addEventListener都是為dom元素添加事件監(jiān)聽,使其在事件發(fā)生后執(zhí)行相應(yīng)的代碼,操作。有了它們我們實現(xiàn)了頁面與用戶交互。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- js中onclick和addEventListener的區(qū)別
- js中onclick和addEventListener的區(qū)別詳解
- js中addEventListener()與removeEventListener()用法案例分析
- JavaScript使用addEventListener添加事件監(jiān)聽用法實例
- window.addEventListener來解決讓一個js事件執(zhí)行多個函數(shù)
- JS在IE和FF下attachEvent,addEventListener學(xué)習(xí)筆記
- Javascript 的addEventListener()及attachEvent()區(qū)別分析
- JS中addEventListener的使用示例詳解
相關(guān)文章
新年快樂! javascript實現(xiàn)超級炫酷的3D煙花特效
這篇文章主要為大家詳細(xì)介紹了javascript實現(xiàn)超級炫酷的3D煙花特效,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-01-01JavaScript?中URL?查詢字符串(query?string)的序列與反序列化的方法
在 JavaScript 中,可以使用?URLSearchParams?對象來處理 URL 中的查詢字符串,這篇文章主要介紹了JavaScript?中URL查詢字符串(query?string)的序列與反序列化,需要的朋友可以參考下2023-01-01javascript之通用簡單的table選項卡實現(xiàn)(二)
上篇中的選項卡存在這樣的問題:把邏輯封裝在table.js中,不夠靈活,也就是說如果某個選項卡是實現(xiàn)異步請求或者跳轉(zhuǎn),而非div的顯隱切換,那么就得修過table.js來達(dá)到目的,顯然不是我所需要的。2010-05-05一文教你實現(xiàn)JavaScript防抖優(yōu)化代碼
在我們前端編程中,假如我們要給后端發(fā)送請求,萬一手抖多點了幾次,多發(fā)送了幾遍怎么辦,那就得用防抖處理,下面小編就來教大家如何實現(xiàn)防抖吧2023-11-11ES6字符串模板,剩余參數(shù),默認(rèn)參數(shù)功能與用法示例
這篇文章主要介紹了ES6字符串模板,剩余參數(shù),默認(rèn)參數(shù)功能與用法,結(jié)合具體實例形式分析了ECMAScript6中的6字符串模板,剩余參數(shù),默認(rèn)參數(shù)的概念、作用、使用方法與相關(guān)注意事項,需要的朋友可以參考下2017-04-04JavaScript判斷當(dāng)前時間是在某個時間點之前/之后
本文主要介紹了JavaScript判斷當(dāng)前時間是在某個時間點之前/之后,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07Bootstrap treeview實現(xiàn)動態(tài)加載數(shù)據(jù)并添加快捷搜索功能
本文實現(xiàn)了運(yùn)用bootstrap treeview實現(xiàn)動態(tài)加載數(shù)據(jù),并且添加快捷搜索功能,需要的朋友參考下2018-01-01js+html5實現(xiàn)的自由落體運(yùn)動效果代碼
這篇文章主要介紹了js+html5實現(xiàn)的自由落體運(yùn)動效果,通過JavaScript結(jié)合html5元素調(diào)用時間函數(shù)實時計算實現(xiàn)物體自由下落及動能損耗的效果,需要的朋友可以參考下2016-01-01