美文网首页
Javascript事件

Javascript事件

作者: zhCN_超 | 来源:发表于2017-07-13 21:29 被阅读5次

    2016/05/02
    JavascriptHTML的交互主要通过事件来实现。

    事件流

    HTML标签是嵌套的,我们点击最里层的元素时,是不是点击了这个元素的所有父标签呢?
    事件流描述了从页面中接受事件的顺序,IE的是事件冒泡,其它的是事件捕获。

    事件冒泡

    事件从最里层传递至最外层

    事件捕获

    事件从最外层传递至最里层

    DOM 事件流

    DOM2 级事件的事件流包括:捕获阶段、处于目标阶段、冒泡阶段
    DOM2 级事件规范指明捕获阶段不涉及事件目标,但是仍有一些浏览器在这个阶段触发了对象上的操作事件。

    IE8以及更早的浏览器不支持 "DOM 事件流"

    事件处理程序

    事件的名称比如click等,它们对应的事件函数称为事件处理程序

    HTML

    <input type="button" value="单击事件" onclick="alert('you clicked me!')">
    

    这种因为脚本和HTML耦合度太高,现在的前端工程已经很少使用,不在赘述。

    DOM0 级

    var btn = document.getElementById('demo');
    // 添加事件
    btn.onclick = function(){
      alert(this.id); // this 为这个元素
    };
    btn.onclick = null; // 删除事件
    

    DOM2 级

    /*
      所有的 DOM 节点都支持这两个方法
      添加事件: addEventListener()
      删除事件:removeEventListener()
     */
    var btn = document.getElementById('demo');
    btn.addEventListener('click', function(){}, false); // 添加事件
    btn.removeEventListener('click', function(){}, false); // 删除事件,这只是举例,其实无法删除,因为是匿名函数
    

    两个方法都有三个参数

    1. 事件名(不带on前缀)
    2. 事件处理程序(即函数)
    3. 布尔值(true则在捕获阶段触发2false则在冒泡阶段触发2),为了兼容IE,都设置成false

    匿名的事件处理程序无法删除
    添加多个事件,顺序执行

    IE

    /*
      所有的 DOM 节点都支持这两个方法
      添加事件: attachEvent()
      删除事件:detachEvent()
     */
    var btn = document.getElementById('demo');
    btn.attachEvent('onclick', function(){
      alert(this); // this === window
    }); // 添加事件
    btn.detachEvent('onclick', function(){}); // 删除事件,这只是举例,其实无法删除,因为是匿名函数
    

    两个方法都有三个参数

    1. 事件名(带on前缀)
    2. 事件处理程序(即函数)

    添加多个事件,倒序执行

    相关文章

      网友评论

          本文标题:Javascript事件

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