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

dispatch: function( event ) {

        //这里是修正event对象的属性,处理兼容性问题

        event = jQuery.event.fix( event );

        var i, ret, handleObj, matched, j,

            handlerQueue = [],//事件队列

            args = slice.call( arguments ),//获取第一参数为event

            handlers = ( jQuery._data( this, "events" ) || {} )[ event.type ] || [],//从缓存系统中获取改标签的事件对象

            special = jQuery.event.special[ event.type ] || {};// 对象用于某些事件类型的特殊行为和属性

        // Use the fix-ed jQuery.Event rather than the (read-only) native event

        args[0] = event;

        event.delegateTarget = this;

        // Call the preDispatch hook for the mapped type, and let it bail if desired

        if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {

            return;

        }

        // Determine handlers

        handlerQueue = jQuery.event.handlers.call( this, event, handlers );//处理事件队列,过滤,排序等操作

 

        //先运行代理事件,且没有阻止冒泡

        i = 0;

        while ( (matched = handlerQueue[ i++ ]) && !event.isPropagationStopped() ) {

            event.currentTarget = matched.elem;

            j = 0;

            while ( (handleObj = matched.handlers[ j++ ]) && !event.isImmediatePropagationStopped() ) {//在这里我们取出了在绑定事件的组合的对象

                // Triggered event must either 1) have no namespace, or

                // 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace).

                if ( !event.namespace_re || event.namespace_re.test( handleObj.namespace ) ) {

                    event.handleObj = handleObj;

                    event.data = handleObj.data;//在这里我们可以在执行事件的时通过event.data来访问自定的数据

                    //真正触发执行事件的地方

                    ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler )

                            .apply( matched.elem, args );

                    if ( ret !== undefined ) {

                        if ( (event.result = ret) === false ) {

                            event.preventDefault();//阻止默认行为

                            event.stopPropagation();//阻止冒泡

                        }

                    }

                }

            }

        }

        //特殊事件的处理

        if ( special.postDispatch ) {

            special.postDispatch.call( this, event );

        }

        return event.result;
    }

好了,今天就到这里了,一点一点偷!

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

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

    在上一篇<jQuery学习-事件之绑定事件(二)>我们了解了jQuery的dispatch方法,今天我们来学习下handlers 方法: handlers: 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学习笔记(三):事件和应用

    内容来自[汇智网]jquery学习课程 3.1 页面加载事件 在jQuery中页面加载事件是ready().ready()事件类似于就JavaScript中的onLoad()事件,但前者只要页面的DO ...

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

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

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

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

  8. jquery事件与绑定事件

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

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

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

随机推荐

  1. Eclipse运行Tomcat7源码

    1. 各环境版本: jdk1.6.0_45 (亲测jdk1.7.0_07会有问题,不要用1.7版本的) apache-ant-1.9.4 apache-tomcat-7.0.61-src 2. 安装a ...

  2. js监控视频播放的事件并打印log

    html代码: <!DOCTYPE html> <html> <head> <meta http-equiv="content-type" ...

  3. 第一章——Activity的生命周期

    问题总结: 1.Activity完整的生命周期 2.当打开第二个Activity并关闭时候的生命周期. ①.解释为什么onPause()方法不要有耗时操作 3.Activity发生异常重启的时候问题: ...

  4. Python Challenge 过关心得(0)

    最近开始用Openerp进行开发,在python语言本身上并没有什么太大的进展,于是决定利用空闲时间做一点python练习. 最终找到了这款叫做Python Challenge(http://www. ...

  5. MYSQL 时间计算的 3 种函数

    方法 1. 加法 adddate('date_expression',interval value type); 'date_expression' + interval value type; -- ...

  6. Nginx 配置指令的执行顺序(九)

    紧接在 server-rewrite 阶段后边的是 find-config 阶段.这个阶段并不支持 Nginx 模块注册处理程序,而是由 Nginx 核心来完成当前请求与 location 配置块之间 ...

  7. QNDTU外壳及开发板

        昨天从淘宝上淘来了个DTU外壳,翻出来之前的STM32开发板和GPRS模块开发板,今天准备复习一下开发板,把裸板跑起来.     晒一下装备:     两块开发板:           51n ...

  8. Eclipse图标含义

    学习了这么久,之前也没注意,这次在csdn找个了文章,记录一下: Eclipse的Package Explorer中用图标表示了很多内容,刚刚开始接触Eclipse时对这些图标表示的内容并不清楚,而且 ...

  9. ZigBee 技术简介

       Zigbee是IEEE 802.15.4协议的代名词.根据这个协议规定的技术是一种短距离.低功耗的无线通信技术.这一名称来源于蜜蜂的八字舞,由于蜜蜂(bee)是靠飞翔和“嗡嗡”(zig)地抖动翅 ...

  10. 网路流程图 TCP/IP