1. 程式人生 > 程式設計 >Js on及addEventListener原理用法區別解析

Js on及addEventListener原理用法區別解析

一.首先介紹兩者的用法:

1.on的用法:以onclick為例

第一種:

obj.onclick = function(){
//do something..
}

第二種:

obj.onclick= fn;
function fn (){
//do something...
}

第三種:當函式fn有引數的情況下使用匿名函式來傳參:

obj.onclick = function(){fn(param)};
function fn(param){
//do something..
}

不能夠這樣寫:錯誤寫法:obj.onclick= fn(param):

因為這樣寫函式會立即執行,不會等待點選觸發,特別注意一下

2.addEventListener的用法:

形式:

addEventListener(event,funtionName,useCapture)

引數:

  • event:事件的型別如 “click”
  • funtionName:方法名
  • useCapture(可選):布林值,指定事件是否在捕獲或冒泡階段執行。
  • true - 事件控制代碼在捕獲階段執行
  • false- false- 預設。事件控制代碼在冒泡階段執行

寫法:

第一種:

obj.addEventListener("click",function(){
//do something
}));

第二種,沒引數可以直接寫函式名

obj.addEventListener("click",fn,fasle));
function fn(){
//do something..
}

第三種:函式有引數時需要使用匿名函式來傳遞引數

obj.addEventListener("click",function(){fn(parm)},false);

二.兩者的區別

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");
}));

這樣會連續輸出:

hello world
hello world too

三.addEventListener注意事項:

1.特別說明addEventListener不被IE9以下相容,IE9以下用使用attachEvent()

obj.attachEvent(event,funtionName);

引數:

event:事件型別(需要寫成“onclick”前面加on,這個與addEventListener不同)

funtionName:方法名(要引數是也是需要使用匿名函式來傳參)

四.事件集合:

1.滑鼠事件:

  • click(單擊)
  • dbclick(雙擊)
  • mousedown(滑鼠按下)
  • mouseout(滑鼠移走)
  • mouseover(滑鼠移入)
  • mouseup(滑鼠彈起)
  • mousemove(滑鼠移動)

2.鍵盤事件:

  • keydown(鍵按下)
  • keypress(按鍵)
  • keyup(鍵起來)
  • 3.HTML事件:
  • load(載入頁面)
  • unload(解除安裝離開頁面)
  • change(改變內容)
  • scroll(滾動)
  • focus(獲得焦點)
  • blur(失去焦點)

五.總結:

onXXX與addEventListener都是為dom元素新增事件監聽,使其在事件發生後執行相應的程式碼,操作。有了它們我們實現了頁面與使用者互動。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。