事件

2017-04-30  本文已影响0人  程序猿人王小贱

1. 事件

IE的事件流是事件冒泡流
Netscape是的事件流是事件捕获流

DOM事件流 :规定事件包括三个阶段:

  1. 事件捕获阶段
  2. 处于目标阶段
  3. 事件冒泡阶段
事件流程.jpg

document > html > body > div (点击div元素事件)
在DOM事件流中,实际的目标元素(<div>元素)在捕获阶段不会接收到事件。这就意味着在捕获阶段,事件从document到<html>到<body>后就停止了。下一个阶段是“处于目标”阶段,于是事件在<div>元素上发生,并在事件处理中被看成是冒泡阶段的一部分。然后,冒泡阶段发生,事件又传播回文档。

2. 事件处理程序:响应事件的程序。

2.1 HTML事件处理程序:会创建一个封装着元素属性值的函数。

2.2 DOM0级事件处理程序:通过Javascript指定事件处理程序的传统方式,就是将一个函数赋值给事件处理程序。

  • 每个元素(包括windowdocument)都有自己的事件处理程序,如 onclickonready,属性的值设置为一个函数,就可以指定事件处理程序。
var btn = document.getElementById('myBtn');
btn.onclick = function(){
  alert();
}

btn.onclick = null;//删除事件处理程序

2.3 DOM2级事件处理程序:指定和删除事件处理程序

    <button type="button" id="btn">Click Me</button>
    <script type="text/javascript">
        "use strict"
        var btn = document.getElementById('btn');
        //事件不能取消,事件处理程序为匿名函数
        btn.addEventListener('click', function(event){
            console.log(this, event);//先执行1
        }, false);
        btn.addEventListener('click', function(event){
            console.log(this, event);//后执行2
        }, false);
    </script>

2.4 IE事件处理程序

<button type="button" id="btn">Click Me</button>
<script type="text/javascript">
  "use strict"
  var btn = document.getElementById('btn');
  var handler = function(){
    alert(this);//IE事件作用域全局,this === window
  }
  btn.attachEvent('onclick', handler);//事件处理程序使用匿名函数将不能删除事件
  btn.attachEvent('onclick', handler);
  btn.detachEvent('onclick', handler);//删除事件处理程序,参数必须完全相同
</script>

view
2.window对象
1.window对象

2.5 跨浏览器事件处理程序

    <script type="text/javascript">
        var EventUtil = {
            addHandler: function(elem, type, handler){
                if (elem.addEventListener) { //DOM2级
                    elem.addEventListener(type, handler, false);
                }else if(elem.attachEvent) { //IE事件处理程序
                    elem.attachEvent("on" + type, handler); //兼容IE8及以下,加上on前缀
                }else{ //DOM0级
                    elem["on" + type] = handler;
                }
            },
            removeHandler: function(elem, type, handler){
                if (elem.removeEventListener) { //DOM2级
                    elem.removeEventListener(type, handler, false);
                }else if(elem.detachEvent) { //IE事件处理程序
                    elem.detachEvent("on" + type, handler); //兼容IE8及以下,加上on前缀
                }else{ //DOM0级
                    elem["on" + type] = null;
                }               
            }
        }
    </script>

3. 事件对象

所有浏览器都支持event对象。

** 3.1 DOM级事件对象**

上一篇下一篇

猜你喜欢

热点阅读