在上一篇《jQuery学习-事件之绑定事件(二)》我们了解了jQuery的dispatch方法,今天我们来学习下handlers

方法:

handlers: function( event, handlers ) {

        var sel, handleObj, matches, i,

            handlerQueue = [],

            delegateCount = handlers.delegateCount,

            cur = event.target;//绑定委托事件的元素

        // Find delegate handlers

        // Black-hole SVG <use> instance trees (#13180)

        // Avoid non-left-click bubbling in Firefox (#3861)

        //委托事件过滤,符合条件的事件才会被加入事件队列中

        if ( delegateCount && cur.nodeType && (!event.button || event.type !== "click") ) {

            /* jshint eqeqeq: false */

            for ( ; cur != this; cur = cur.parentNode || this ) {

                /* jshint eqeqeq: true */

                // Don't check non-elements (#13208)

                // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)

                /*

                 nodeTyp:

                     元素element             1

                     属性attr                2

                     文本text                3

                     注释comments            8

                     文档document            9

                 

                 * */

                if ( cur.nodeType === 1 && (cur.disabled !== true || event.type !== "click") ) {

                    matches = [];

                    for ( i = 0; i < delegateCount; i++ ) {

                        handleObj = handlers[ i ];

                        // Don't conflict with Object.prototype properties (#13203)

                        sel = handleObj.selector + " ";

                        if ( matches[ sel ] === undefined ) {

                            matches[ sel ] = handleObj.needsContext ?

                                jQuery( sel, this ).index( cur ) >= 0 :

                                jQuery.find( sel, this, null, [ cur ] ).length;//判断【当前元素】是否是【绑定委托事件元素】的子元素

                        }

                        if ( matches[ sel ] ) {

                            matches.push( handleObj );

                        }

                    }

                    if ( matches.length ) {

                        handlerQueue.push({ elem: cur, handlers: matches });//将符合条件的事件加入事件队列中

                    }

                }

            }

        }

        //将非委托事件加入事件队列

        if ( delegateCount < handlers.length ) {

            handlerQueue.push({ elem: this, handlers: handlers.slice( delegateCount ) });

        }

        return handlerQueue;
    }

OK,到这里了,哈哈!

jQuery学习-事件之绑定事件(三)的更多相关文章

  1. jQuery学习-事件之绑定事件(二)

    在上一篇<jQuery学习-事件之绑定事件(一)>我们了解了jQuery的add方法,今天我们来学习下dispatch方法: dispatch: function( event ) {   ...

  2. jQuery学习-事件之绑定事件(一)

    我们都知道jQuery的事件其思想来源于Dean Edwards的addEvent,通过源码我们知道jQuery在为元素绑定事件时,每种类型的事件(click,blur)时只绑定了一次对应类型的事件处 ...

  3. jQuery如何给body绑定事件?

    jQuery如何给body绑定事件? 代码如下: $(document).bind("resize", function () { alert("php-note.com ...

  4. JQuery在循环中绑定事件的问题详解

    JQuery在循环中绑定事件的问题详解 有个页面上需要N个DOM,每个DOM里面的元素ID都要以数字结尾,比如说 ? 1 2 3 <input type="text" nam ...

  5. jQuery学习小结1-CSS操作+事件

    一.DOM对象和jQuery 对象互换 1.jQuery对象 就是通过jQuery包装DOM对象后产生的对象.jQuery对象是jQuery独有的,其可以使用jQuery里的方法.比如: $(&quo ...

  6. [jquery]高级篇--js绑定事件

    参考:  http://www.cnblogs.com/leejersey/p/3545372.html jQuery on()方法是官方推荐的绑定事件的一个方法.$(selector).on(eve ...

  7. jQuery相关方法7----各种事件和绑定事件

    一.jQuery事件 1.鼠标事件 click与dbclick事件 click事件其实是由mousedown与mouseup 2个动作构成,所以点击的动作只有在松手后才触发 $ele.click(): ...

  8. jquery html 动态添加元素绑定事件

    由于实际的需要,有时需要往网页中动态的插入HTML内容,并在插入的节点中绑定事件处理函数.我们知道,用Javascript向HTML文档中 插入内容,有两种方法, 一种是在写HTML代码写入JS,然后 ...

  9. jquery事件与绑定事件

    1.首先,我们来看一下经常使用的添加事件的方式: <input type="button" id="btn" value="click me!& ...

随机推荐

  1. AngularJs中关于ng-class的三种使用方式说明

    在开发中我们通常会遇到一种需求:一个元素在不同的状态需要展现不同的样子. 而在这所谓的样子当然就是改变其css的属性,而实现能动态的改变其属性值,必然只能是更换其class属性 这里有三种方法: 第一 ...

  2. Yii console 创建命令行应用

    大家都知道PHP的程序没有进程概念,而且生命周期极短,无法实现一些定时计划或者是计划任务,今天我们看看在YII框架中如何使用计划任务创建命令行应用. 1.在 console/controllers 文 ...

  3. jQuery图片懒加载lazyload插件

    http://www.neoease.com/lazy-load-jquery-plugin-delay-load-image/ js 模板引擎

  4. 期末考试--nyoj-757

    期末考试 时间限制:1000 ms  |  内存限制:65535 KB 难度:2 描述 马上就要考试了,小T有许多作业要做,而且每个老师都给出来了作业要交的期限,如果在规定的期限内没 交作业就会扣期末 ...

  5. 轻松背后的N+疲惫——系统日志

    相信很多coder都有这样的癖好:“自恋”!!对自己编写的code总是那么的自信,自豪,Always believe it to be so perfect!! 不喜欢做单元测试(总觉得它就那样了能出 ...

  6. 简单Demo的用户登录JSP界面IE、Firefox(chrome) Enter 键提交表单

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...

  7. sort(水题)

    sort Time Limit: 6000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submi ...

  8. hdu - 4709 - Herding

    题意:给出N个点的坐标,从中取些点来组成一个多边形,求这个多边形的最小面积,组不成多边形的输出"Impossible"(测试组数 T <= 25, 1 <= N < ...

  9. c# List<string>和List<int>互相转换

    List<string> 转 List<int> var list = (new[]{"1","2","3"}).T ...

  10. 利用java生成带有干扰线的网页验证码图片

    package imageCreate; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import j ...