• js事件总结


    •  事件冒泡:

    什么是事件冒泡,就是最深dom节点触发事件,然后逐级向最外层触发事件。打个比方一棵dom tree:li<ul<div每级都有事件绑定,然后我们触发li的事件,这时ul上的事件也会触发,接着div上的事件也会在ul事件触发之后执行。

    demo:

        <div>
            <ul id="ul">
                <li>a</li>
                <li>b</li>
                <li>c</li>
            </ul>
            <a href="http://www.baidu.com">我是连接</a>
        </div>
    $(function(){
        $("li").click(function(event){
            alert('我是li');
        });
        $("div").click(function(event){
            alert("我是div");
        });
        $("a").click(function(event){
            alert("我是a");
        });
    });

     当点击li时,首先会alert出“我是li”,然后会alert出“我是div”;那么如何阻止div上的事件触发呢,可以使用event.stopPropagation()方法阻止事件冒泡~

    $(function(){
        $("li").click(function(event){
            alert('我是li');
            event.stopPropagation(); //阻止事件冒泡
        });
        $("div").click(function(event){
            alert("我是div");
        });
        $("a").click(function(event){
            alert("我是a");
        });
    });

     当点击a时,会触发一个事件alert出“我是a”,随后跳转页面,那么如果我们只想触发事件不跳转页面呢,可以使用event.preventDefault()方法阻止默认事件~

    这里有个最简单方式可以同时阻止冒泡又可以阻止默认事件,我们可以用return false。

    总结:比较简单,总结了一下。(1)阻止事件冒泡:event.stopPropagation(2)阻止默认事件:event.preventDefault(3)return false均可阻止。

    •  事件委托:

    js事件委托是由事件冒泡产生的,指定一个事件处理,就可以管理某一类的事件。

    比如上面的如果每个li我们都要绑定一个触发事件呢,我们需要用一个循环来绑定事件

    $(function(){
        var 
            el_lis = document.getElementsByTagName('li');
        for(var i in el_lis){
            if(el_lis.hasOwnProperty(i)){
                el_lis[i].addEventListener('click',function(){
                    alert('我是li');
                })
            }
        }
    });

    我们知道多次与dom打交道会让一个页面的性能降低,如果出现很多li时,我们也要利用一个循环来绑定事件吗,为何不利用事件冒泡在外层去绑定一个事件呢~这就是事件委托。

    我们将事件绑定在ul上:

    $(function(){
        var 
            el_ul = document.getElementsByTagName('ul');
        el_ul[0].addEventListener('click',function(event){
            alert('我是li');
        })
    });

     那么如果我们让每一个li都有各自不同的触发事件呢,这时引入一个概念就是目标事件。

    $(function(){
        var 
            el_ul = document.getElementsByTagName('ul');
        el_ul[0].addEventListener('click',function(event){
            switch(event.target.textContent){
                case "a":
                    alert("我是a");
                    break;
                case "b":
                    alert("我是b");
                    break;
                case "c":
                    alert("我是c");
                    break;
            }
        })
    });

    目标事件event.target指定了目标dom,这样根据dom的不同可以执行不同的函数。

    总结:以上就是事件委托,事件委托可以在一定程度上优化页面的性能,避免了多次与dom打交道,减少dom操作,这就是委托的根本目的。

  • 相关阅读:
    C#文件操作
    WPF 工具提示(ToolTip)
    C#中is 和 as 操作符
    C#线程同步——lock,Monitor,Mutex(摘录)
    随记
    实现RichTextBox内容自动滚动(WPF)
    初探MVC3(一)
    thinkPad系列的笔记本质量已经大不如以前了,太令人失望了
    WPF—— ComboBox绑定应用
    new,virtual,override,interface,delegate,eventC#——方法实现总结
  • 原文地址:https://www.cnblogs.com/moran1992/p/6485268.html
Copyright © 2020-2023  润新知