• 理解jquery on 委托事件的机制


    前两天做了一个点击任意位置,都能关闭菜单的功能,因为菜单里面的每一个a,的点击事件都是用on绑定的。所以在阻止冒泡的时候不管用,今天特意来理解一下on的机制

    on 是委托事件,利用的就是冒泡原理

    $(selector).on(event,[selector],handler);

    selector 如果为空,表示的就是目标元素就是所选元素,如果有值代表的是符合所选元素的所有后代元素

    实际上,事件委托的事件处理函数是当被委托的元素上的事件触发时判断e.target后执行,而不是目标元素上的事件被触发后就立即执行,在没有阻止冒泡的情况下,事件还是一层层传播的,只是处理函数在事件到达那一层被触发的问题。根据事件代理的规则,点击li元素后,click事件是从li至ul至ul父元素一层层冒泡上去的,沿途触发各个元素上的事件处理函数。如果我们将事件委托在ul上,调用了stopPropagation,就阻止了事件从ul继续向上冒泡,而不是阻止事件从li向上冒泡。这样从ul开始,ul及其祖先元素上的事件冒泡被阻止。

    重要说明

    如果传递了selector参数,那么on()函数并不是为当前jQuery对象匹配的元素绑定事件处理函数,而是为它们的后代元素中符合选择器selector参数的元素绑定事件处理函数on()函数并不是直接为这些后代元素挨个绑定事件,而是委托给当前jQuery对象的匹配元素来处理。由于DOM 2级的事件流机制,当后代元素selector触发事件时,该事件会在事件冒泡中传递给其所有的祖辈元素,当事件流传递到当前匹配元素时,jQuery会判断是哪个后代元素触发了事件,如果该元素符合选择器selector,jQuery就会捕获该事件,从而执行绑定的事件处理函数

    通俗易懂地说,如果我们希望给页面上所有的<P>标签绑定click事件处理函数,我们可以在每个P标签上直接分别绑定click事件处理函数。例如:

    // 为所有P元素分别绑定click事件处理函数handler
    $("p").on("click", handler);

    我们也可以在这些P标签的任意一个公共祖辈元素上绑定事件委托机制,利用DOM的事件冒泡机制来统一委托处理。当我们触发了某个元素的click事件,JS会依次通知该元素及其"父辈"元素、"爷爷辈"元素……直到最顶部的document对象为止,如果这些元素上绑定了click事件处理函数就会依次执行。

    // 在body元素上绑定click事件处理函数handler,如果这个click事件是由其后代的P元素触发的,就执行handler
    $(document.body).on("click", "p", handler);

    在这里的示例中,事件委托机制就是,我们不为每个P元素直接绑定click事件处理函数,而是委托给其某个公共的祖辈元素(此处示例中为document.body),"告诉"他:如果接收到了click事件触发通知,并且这个click事件是由我们这些P元素其中之一触发的,就执行祖辈元素上委托绑定的事件处理函数。

    如果在后代元素中阻止了冒泡,他就不会传递到祖辈,

    直接在后代中为每个后代元素执行事件和函数

    例子

    $("ul").on('click',function(){

      console.log('我是父级ul');

    })

    $('ul').on('click','li',function(e){

       e.stopPaptration();//为了不让点击li 使得他们的父级的事件也触发了,就阻止冒泡,这样就只为所有的li 执行事件,不会再执行到ul上去

       cnosole.log($(this).text());//当前被点击的那个li

    })

    如果是实现点击任意地方关闭的话,要这样写

    $(document).on('click','li',function(e){

        e.stopPaptration(); //阻止冒泡

    })

    这样之后点击li元素本身的话,他不会冒泡到document上。也就不会关闭 li .

    $(document).on('click',function(){

       $('li').hide();

    })

  • 相关阅读:
    sgu101Domino
    KM模版
    UVA11383 Golden Tiger Claw(KM算法)
    POJ3565Ants(KM算法)
    POJ3041Asteroids(二分图最小点覆盖)
    UVA1175 Ladies' Choice(稳定婚姻问题,二分图)
    POJ1273Drainage Ditches(裸的最大流)
    UVA1201 Taxi Cab Scheme(POJ2060)DAG的最小路径覆盖
    二分图最大匹配数模版
    11419 SAM I AM(二分图)
  • 原文地址:https://www.cnblogs.com/daiwenru/p/7259045.html
Copyright © 2020-2023  润新知