当前位置:首页 > Web开发 > 正文

false);}else{//IE8及以下 注意 on//obj.attachEvent(on+eventStr

2024-03-31 Web开发

标签:

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>

JS事件之自建函数bind()与兼容性问题解决

温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/web/32723.html