美文网首页
具有浏览器兼容性的事件处理程序方法

具有浏览器兼容性的事件处理程序方法

作者: Sketch | 来源:发表于2017-10-31 20:00 被阅读15次

在添加事件处理程序事addEventListener和attachEvent主要有几个区别

  1. 参数个数不相同,这个最直观,addEventListener有三个参数,attachEvent只有两个,attachEvent添加的事件处理程序只能发生在冒泡阶段,addEventListener第三个参数可以决定添加的事件处理程序是在捕获阶段还是冒泡阶段处理(我们一般为了浏览器兼容性都设置为冒泡阶段)

  2. 第一个参数意义不同,addEventListener第一个参数是事件类型(比如click,load),而attachEvent第一个参数指明的是事件处理函数名称(onclick,onload)

  3. 事件处理程序的作用域不相同,addEventListener的作用域是元素本身,this是指的触发元素,而attachEvent事件处理程序会在全局变量内运行,this是window,所以刚才例子才会返回undefined,而不是元素id

  4. 为一个事件添加多个事件处理程序时,执行顺序不同,addEventListener添加会按照添加顺序执行,而attachEvent添加多个事件处理程序时顺序无规律(添加的方法少的时候大多是按添加顺序的反顺序执行的,但是添加的多了就无规律了),所以添加多个的时候,不依赖执行顺序的还好,若是依赖于函数执行顺序,最好自己处理,不要指望浏览器

了解了这四点区别后我们可以尝试写一个浏览器兼容性比较好的添加事件处理程序方法

function addEvent(node, type, handler) {
  if (!node) return false;
  if (node.addEventListener) {
    node.addEventListener(type, handler, false);
    return true;
  } else if (node.attachEvent) {
    node['e' + type + handler] = handler;
    node[type + handler] = function() {
      node['e' + type + handler](window.event);
    };
    node.attachEvent('on' + type, node[type + handler]);
    return true;
  }
  return false;
}

在取消事件处理程序的时候:

function removeEvent(node, type, handler) {
  if (!node) return false;
  if (node.removeEventListener) {
    node.removeEventListener(type, handler, false);
    return true;
  } else if (node.detachEvent) {
    node.detachEvent('on' + type, node[type + handler]);
    node[type + handler] = null;
  }
  return false;
}

相关文章

  • 具有浏览器兼容性的事件处理程序方法

    在添加事件处理程序事addEventListener和attachEvent主要有几个区别 参数个数不相同,这个最...

  • JS 事件

    目录 事件流 事件处理程序HTML事件处理程序DOM0级事件处理程序DOM2级事件处理程序IE事件处理程序跨浏览器...

  • JavaScript事件处理程序

    事件处理程序 事件:用户和浏览器执行的操作事件处理程序:响应时间的函数方法:**1.直接在HTML标签中给同名的事...

  • dom事件对象以及兼容写法

    DOM中的事件对象兼容DOM的浏览器会将一个event对象传入到事件处理程序中,无论指定事件处理程序时使用什么方法...

  • 跨浏览器的事件处理程序

    事件处理程序有DOM0级事件处理程序、DOM2级事件处理程序,IE事件处理程序,DOM0级事件处理程序具有简单,跨...

  • 关于JavaScript跨浏览器事件的处理

    一、4种事件处理程序 事件就是用户或浏览器自身执行的某种操作,而事件处理程序即为响应某个事件的函数。事件处理程序大...

  • 你知道页面上常见的事件类型吗

    我们常用的事件类型有UI事件,焦点事件,鼠标事件,滚轮事件,键盘事件和文本事件,用了跨浏览器添加事件处理程序的方法...

  • 原生JS-12

    什么是事件:就是指用户或浏览器的某些行为,如用户点击鼠标、敲击键盘或者浏览器刷新 事件处理程序:所谓事件处理程序就...

  • JavaScript-高级篇之事件

    什么是事件 掌握事件流 掌握DOM事件流与IE事件处理程序 掌握跨浏览器的事件处理程序 掌握event对象的常用属...

  • 【javascript】事件处理程序

    事件处理程序 事件就是用户或浏览器自身执行的某种动作,而响应某个事件的函数就叫做事件处理程序。 1、HTML 事件...

网友评论

      本文标题:具有浏览器兼容性的事件处理程序方法

      本文链接:https://www.haomeiwen.com/subject/fmhipxtx.html