JavaScript事件系結常用方法
-
物件.事件 = 函式;
它只能同時為一個物件的一個事件系結一個回應函式
不能系結多個,如果有多個,后面的會覆寫前面的 -
addEventListener()
此方法也可以為元素系結回應函式
引數:
- 事件的字串(不帶on)
- 回呼函式,事件觸發時執行
- 是否在捕獲階段觸發事件,一般都傳false
使用此方法可以為一個元素的同一事件系結多個回應函式
當事件觸發時,按系結順序依次執行
-
attachEvent()
IE8及以下瀏覽器不支持addEventListener()方法,但可以使用attachEvent()方法起到同樣的效果
引數:
- 事件字串(帶on)
- 回呼函式
此方法也可以系結多個函式,不過函式執行順序與addEventListener()相反
-
this問題與解決
addEventListener()中的this是系結事件的物件
attachEvent()中的this是window
如果要解決兼容性問題則需要統一兩個方法的this這里我們用到了call()方法
call()可以用來改變函式的this
自建函式bind()
自己定義一個函式用來給一個物件系結事件
-
思路
三個引數:物件,事件,回呼函式
兼容性:
-
通過if判斷物件是否存在addEventListener方法來區分瀏覽器
-
this問題的解決
由于傳入的回呼函式是瀏覽器呼叫的,我們無法去操作,所以我們在attachEvent()不直接傳入回呼函式,而是先定義一個匿名函式,然后在函式內部呼叫回呼函式,并利用call方法改變this
-
示例代碼
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script type="text/javascript">
window.onload = function(){
var btn1 = document.getElementById("btn1");
bind(btn1, "click",function(){
alert(this);
});
};
//定義一個函式bind(),用來為指定元素系結事件回應函式
/*
* 引數:
* obj 要系結事件的物件
* eventStr 事件的字串
* func 回呼函式
*/
function bind(obj, eventStr, func){
//判斷是否有addEventListener()方法
if(obj.addEventListener){
//大部分瀏覽器兼容的方式
obj.addEventListener(eventStr, func, false);
}
else{
//IE8及以下 注意 on
//obj.attachEvent("on"+eventStr, func);//此方法this為window下面提供解決方法
//統一this 不直接呼叫func而是在匿名函式內呼叫
obj.attachEvent("on"+eventStr, function(){
//在匿名函式內呼叫回呼函式 利用call()方法將this改為obj
func.call(obj);
});
}
};
</script>
</head>
<body>
<button id="btn1">btn1</button>
</body>
</html>
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/159156.html
標籤:JavaScript
上一篇:封裝axios
下一篇:CSS常用邊框
