javascript事件绑定的this

发布于 2022-09-10 18:56:57 字数 2927 浏览 9 评论 0

转:oneroom

javascript事件绑定的this

在javascript的事件绑定中,我们经常用到的方法是

  1. function addListener(el, event, fn, bCapture){
  2.     var isCapture = bCapture ? bCapture : false;
  3.     try {
  4.        el.addEventListener(event, fn, isCapture);
  5.     }
  6.     catch (e) {
  7.         try {
  8.             el.attachEvent('on' + event, fn);
  9.         }
  10.         catch (e) {
  11.             el['on' + event] = fn;
  12.         }
  13.     }
  14. }
  15. function whatIsThis(){
  16.     if (this === window) {
  17.         alert('This is a window object');
  18.     }
  19.     alert('So, This.tagName is:'+ '‘'+ this.tagName +'’。');
  20. }

复制代码addListener(spanEl, 'click', whatIsThis);
但是这个存在一个问题,就是事件处理函数fn中this的指向在不同的浏览器(firefox和ie)中有不同的含义,在ie中this指向的是window对象,这个是不可理解的,一般来说this都是指向当前的元素。

解决办法:

1如果只有一个事件绑定,可以采用elem.onclick=function(e){};

2

  1. function addEvent(el, event, fn, obj, overrideContext, bCapture){
  2.     var context = el, isCapture = bCapture ? bCapture : false, wrappedFn = null;
  3.     if (overrideContext) {
  4.         if (overrideContext === true) {
  5.             context = obj;
  6.         }
  7.         else {
  8.             context = overrideContext;
  9.         }
  10.     }
  11.     wrappedFn = function(){
  12.         return fn.call(context);
  13.     };
  14.     try {
  15.         el.addEventListener(event, wrappedFn, isCapture);
  16.     }
  17.     catch (e) {
  18.         try {
  19.             el.attachEvent('on' + event, wrappedFn);
  20.         }
  21.         catch (e) {
  22.             el['on' + event] = wrappedFn;
  23.         }
  24.     }
  25. }

复制代码

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文