• jquery on方法(事件委托)


    jquery绑定事件处理函数的方法有好几个,比如:bind(),on(),delegate(),live()。

    其中delegate和live都是用on实现的,效果也类似,live好像在1.7版本中已经废弃了。

    这里重点看看on的用法:

    $(el).on( events [, selector ] [, data ], handler(eventObject) )

    如果省略了selector参数,on方法和bind方法效果一样。

    如果传递了参数selector,其实就生成了一个“事件委托”。

    什么是“事件委托”呢?

    我们知道浏览器事件传播时经历了三个过程:捕获阶段 、目标阶段 和 冒泡阶段。

    事件捕获是指事件从document到触发事件的目标对象(event.target)的过程;

    事件冒泡是指从触发事件的目标对象(event.target)到document的过程。

    当我们点击一个元素的时候,除了会触发该元素的click事件,也会冒泡触发其祖先元素的click事件(包括document)。

    利用这一特性,我们可以直接在一个元素(比如document)上绑定一个事件处理函数来处理该元素所有子孙元素的该事件,当然,这里一般会在处理函数里判断event.target,根据触发事件的目标对象不同进行不同的操作。这一过程就叫事件委托。

    on方法传递了参数selector时就构成了一个上面这样的事件委托,关于selector参数的介绍jquery文档中描述的不是很清楚,看网上很多文章关于这块都理解的有点偏差,所以写代码测试了一下:

    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>jquery on方法</title>
    <script src="http://lib.sinaapp.com/js/jquery/2.0.2/jquery-2.0.2.min.js"></script>
    </head>
    <body>
    <div style="position:relative;800px;height:600px;margin:0 auto;background-color:lightblue;">
        <div id="middle" style="position:absolute;top:50%;left:50%;600px;height:400px;margin:-200px 0 0 -300px;background-color:blue;">
            <div id="inter" style="position:absolute;top:50%;left:50%;400px;height:200px;margin:-100px 0 0 -200px;background-color:darkblue;">
                <div id="innter" style="position:absolute;top:50%;left:50%;200px;height:100px;margin:-50px 0 0 -100px;background-color:black;">
    
                </div>
            </div>
        </div>
    </div>
    
    
    <script>
    $(function(){
        $("div").on(
            "click",
            "#inter",
            {o1:'hi',o2:'jquery'},
            function(e){
                console.log(this,e.data);
                //e.stopPropagation();
            }
        );
    });
    </script>
    </body>
    </html>

    测试用例中用了4个嵌套的div,用on方法给div元素绑定click事件的处理函数,其中selector参数传递的为“#inter”,点击#outer和#middle时没有结果输出,当点击#inter或#innter时执行结果都为:

    根据事件冒泡的顺序和div的层数我们可以分析出每次的两行输出都是#middle和#outer两个div的click事件处理函数执行的结果。

    综合分析得出:

    如果on方法传递了selector参数(且不为null),只有当selector是el的子孙元素,且触发事件的元素是selector或者selector的子孙元素时,才会触发绑定在el上的事件处理函数。

    最后顺便一提,取消用on绑定的事件处理函数的方法是off()。

  • 相关阅读:
    sql server 的语句形式
    restful规范
    sql server 相对应的增删改查以及表的创建及修改
    简单介绍函数sorted
    简单介绍sql server
    Python中三种格式化输出的方式
    基于socket 数据传输的粘包问题
    Python socket 套接字实现通信
    Dapr-状态管理
    Dapr-服务调用
  • 原文地址:https://www.cnblogs.com/sooj/p/3566718.html
Copyright © 2020-2023  润新知