false);}else{//IE8及以下 注意 on//obj.attachEvent(on+eventStr
标签:
JavaScript事件绑定常用要领东西.事件 = 函数;
它只能同时为一个东西的一个事件绑定一个响应函数
不能绑定多个,如果有多个,后面的会笼罩前面的
addEventListener()
此要领也可以为元素绑定响应函数
参数:
事件的字符串(不带on)
回调函数,事件触发时执行
是否在捕获阶段触发事件,一般都传false
使用此要领可以为一个元素的同一事件绑定多个响应函数
当事件触发时,按绑定挨次依次执行
attachEvent()
IE8及以下浏览器不撑持addEventListener()要领,但可以使用attachEvent()要领起到同样的效果
参数:
事件字符串(带on)
回调函数
此要领也可以绑定多个函数,不过函数执行挨次与addEventListener()相反
this问题与解决
addEventListener()中的this是绑定事件的东西
attachEvent()中的this是window
如果要解决兼容性问题则需要统一两个要领的this
这里我们用到了call()要领
call()可以用来转变函数的this
本身界说一个函数用来给一个东西绑定事件
思路
三个参数:东西,事件,回调函数
兼容性:
通过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