zoukankan      html  css  js  c++  java
  • 事件机制

    DOM2事件流

    事件捕获阶段 --- 处于目标阶段 --- 事件冒泡阶段

    事件捕获

    当触发某个元素的事件时,会从顶层对象document发出一个事件流,随着dom树向目标元素节点流去,直到找到目标节点才停止。在捕获阶段,该事件的处理函数不会执行。

    处于目标阶段

    当到达目标元素时,触发相应事件,执行相应处理函数。

    事件冒泡

    当触发某个元素的事件时,会从该元素一层层的向上传播,直到到达document元素。在此途中,如果有节点绑定了相应的事件处理函数,则都会被触发

    阻止事件冒泡

    firefox浏览器:e.stopPropagation()

    IE浏览器:e.cancelBubble() = true

    得到事件代理对象和事件源

    xxx.onclick = funtion(e){
        var event = e ||window.event;
        var target = event.target || event.srcElement;
    }

    事件代理

    利用事件冒泡机制,将事件绑定在父元素身上,当触发子元素的某事件时,会先冒泡到父元素上,然后父元素判断事件源对象是否为目标元素,再决定是否执行处理函数

    <ul class="uu">
            <li></li>
            <li></li>
            <li></li>
            <li></li>
            <li></li>
            <li></li>
            <li></li>
            <li></li>
        </ul>
        <script>
            var ulobj = document.querySelector('.uu');
            ulobj.onclick = function (e) {
                var event = window.event || e;
                var target = event.srcElement || event.target;
                if (target.tagName.toLowerCase() === 'li') {
                    alert('点到啦')
                }
            }
        </script>

    监听事件的方式

    DOM0级中,通过`on+事件名`的方式监听事件

    ulobj.onclick = function (e) {}

    DOM2级中,通过addEventListener监听事件,removeEventListener移除事件

    // 第一个参数:事件类型  第二个参数:事件处理函数 第三参数:是否使用事件捕获,默认为false
    ulobj.addEventListener('click', func, false)
    ulobj.removeEventListener('click', func, false)

    而在老的IE版本中,需要处理兼容

    ulobj.attachEvent('on'+type, func) // 绑定
    ulobj.detachEvent('on'+type, func) // 移除
  • 相关阅读:
    asterisk配置SIP服务器
    虚拟机桥接网卡下配置centOS静态IP
    在centOS5.9安装asterisk
    Cut 命令截取不同空格的string
    shell 中 贪婪匹配 和 非贪婪匹配
    shell 一些例子
    linux 系统时间 EST CST
    awk简单应用
    python3.5-ssh免输入密码过程
    GitHub个人使用入门
  • 原文地址:https://www.cnblogs.com/ashen1999/p/12732212.html
Copyright © 2011-2022 走看看