绑定多个事件
1. 对象.addEventListener(“事件类型”,事件处理函数,false)——谷歌和火狐支持,IE8不支持
参数1:事件的类型—事件的名字,没有on 参数2:事件处理函数—函数(命名函数,匿名函数) 参数3:布尔类型,指定事件处理函数的时期或阶段-------先写false (第三个参数后文事件冒泡时候再说,链接: https://blog.csdn.net/weixin_45525272/article/details/108142029 )
为同一个元素绑定多个相同的事件--
my$ ( "btn" ) . addEventListener ( "click" , function ( ) {
console. log ( "你好啊" ) ;
} , false ) ;
my$ ( "btn" ) . addEventListener ( "click" , function ( ) {
console. log ( "你好牛啊" ) ;
} , false ) ;
my$ ( "btn" ) . addEventListener ( "click" , function ( ) {
console. log ( "你好牛逼啊" ) ;
} , false ) ;
my$ ( "btn" ) . addEventListener ( "click" , function ( ) {
console. log ( "你是好牛逼啊" ) ;
} , false ) ;
2. 对象.attachEvent(“有on的事件类型”,事件处理函数)——谷歌不支持,火狐不支持,IE8支持
参数1:事件类型—事件名字,有on 参数2:事件处理函数—函数(命名函数,匿名函数)
my$ ( "btn" ) . attachEvent ( "onclick" , function ( ) {
console. log ( "小杨好帅哦1" ) ;
} ) ;
my$ ( "btn" ) . attachEvent ( "onclick" , function ( ) {
console. log ( "小杨好帅哦2" ) ;
} ) ;
my$ ( "btn" ) . attachEvent ( "onclick" , function ( ) {
console. log ( "小杨好帅哦3" ) ;
// });
3. 绑定事件兼容代码
//为任意元素.绑定任意的事件, 任意的元素,事件的类型,事件处理函数
function addEventListener ( element, type, fn ) {
//判断浏览器是否支持这个方法
if ( element. addEventListener) {
element. addEventListener ( type, fn, false ) ;
} else if ( element. attachEvent) {
element. attachEvent ( "on" + type, fn) ;
} else {
element[ "on" + type] = fn;
}
}
addEventListener ( my$ ( "btn" ) , "click" , function ( ) {
console. log ( "你好啊" ) ;
} ) ;
addEventListener ( my$ ( "btn" ) , "click" , function ( ) {
console. log ( "你好二啊" ) ;
} ) ;
addEventListener ( my$ ( "btn" ) , "click" , function ( ) {
console. log ( "你好二虎啊" ) ;
} ) ;
4.两种方法的区别
相同点: 都可以为元素绑定事件 不同点:
方法名不一样 参数个数不一样 addEventListener三个参数, attachEvent两个参数 addEventListener 谷歌,火狐,IE11支持,IE8不支持 attachEvent 谷歌火狐不支持,IE11不支持,IE8支持 this不同, addEventListener 中的this是当前绑定事件的对象 attachEvent中的this是window addEventListener中事件的类型(事件的名字)没有on attachEvent中的事件的类型(事件的名字)有on
事件解绑
注意:用什么方式绑定事件,就应该用对应的方式解绑事件
1.对象.on事件名字=null
// 1.绑定事件
my$ ( "btn" ) . onclick = function ( ) {
console. log ( "我很好" ) ;
} ;
my$ ( "btn2" ) . onclick = function ( ) {
// 2.解绑事件
my$ ( "btn" ) . onclick= null ;
} ;
2. removeEventListener解绑事件
对象.addEventListener(“没有on的事件类型”,命名函数,false);—绑定事件 对象.removeEventListener(“没有on的事件类型”,函数名字,false);
function f1 ( ) {
console. log ( "第一个事件" ) ;
}
function f2 ( ) {
console. log ( "第二个事件" ) ;
}
my$ ( "btn" ) . addEventListener ( "click" , f1, false ) ;
my$ ( "btn" ) . addEventListener ( "click" , f2, false ) ;
//点击第二个按钮把第一个按钮的第一个点击事件解绑
my$ ( "btn2" ) . onclick = function ( ) {
//解绑事件的时候,需要在绑定事件的时候,使用命名函数
my$ ( "btn" ) . removeEventListener ( "click" , f1, false ) ;
} ;
3. detachEvent解绑事件
对象.attachEvent(“on事件类型”,命名函数);—绑定事件 对象.detachEvent(“on事件类型”,函数名字);
function f1 ( ) {
console. log ( "第一个事件" ) ;
}
function f2 ( ) {
console. log ( "第二个事件" ) ;
}
my$ ( "btn" ) . attachEvent ( "onclick" , f1) ;
my$ ( "btn" ) . attachEvent ( "onclick" , f2) ;
my$ ( "btn2" ) . onclick = function ( ) {
my$ ( "btn" ) . detachEvent ( "onclick" , f1) ;
} ;
4. 解绑兼容性代码
//绑定事件的兼容
function addEventListener ( element, type, fn ) {
if ( element. addEventListener) {
element. addEventListener ( type, fn, false ) ;
} else if ( element. attachEvent) {
element. attachEvent ( "on" + type, fn) ;
} else {
element[ "on" + type] = fn;
}
}
//解绑事件的兼容
//为任意的一个元素,解绑对应的事件
function removeEventListener ( element, type, fnName ) {
if ( element. removeEventListener) {
element. removeEventListener ( type, fnName, false ) ;
} else if ( element. detachEvent) {
element. detachEvent ( "on" + type, fnName) ;
} else {
element[ "on" + type] = null ;
}
}
案例:
function f1 ( ) {
console. log ( "第一个事件" ) ;
}
function f2 ( ) {
console. log ( "第二个事件" ) ;
}
addEventListener ( my$ ( "btn1" ) , "click" , f1) ;
addEventListener ( my$ ( "btn1" ) , "click" , f2) ;
my$ ( "btn2" ) . onclick = function ( ) {
removeEventListener ( my$ ( "btn1" ) , "click" , f1) ;
} ;
JavaScript switch加载多个事件
common.js
function my$( id) {
return document. getElementById ( id) ;
}
//设置任意的标签中间的任意文本内容
function setInnerText ( element, text) {
//判断浏览器是否支持这个属性
if ( typeof element. textContent == "undefined" ) { //不支持
element. innerText= text;
} else { //支持这个属性
element. textContent= text;
}
}
//获取任意标签中间的文本内容
function getInnerText ( element) {
if ( typeof element. textContent== "undefined" ) {
return element. innerText;
} else {
return element. textContent;
}
}
index.html
<! DOCTYPE html >
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< title> title</ title>
</ head>
< body>
< input type = " button" value = " 小红帽" id = " btn" />
< script src = " common.js" > </ script>
< script>
//为同一个元素绑定多个不同的事件,指向相同的事件处理函数
my$ ( "btn" ) . onclick = f1;
my$ ( "btn" ) . onmouseover = f1;
my$ ( "btn" ) . onmouseout = f1;
function f1 ( e ) {
switch ( e. type) {
case "click" :
alert ( "好帅哦" ) ;
break ;
case "mouseover" :
this . style. backgroundColor = "red" ;
break ;
case "mouseout" :
this . style. backgroundColor = "green" ;
break ;
}
}
// my$("btn").οnmοuseοver=function (e) {
// console.log(e);
// };
</ script>
</ body>
</ html>