zoukankan      html  css  js  c++  java
  • jQuery挖源码——事件绑定

    jQuery版本:2.1.4

    • 最常用事件绑定bind,调用了on。
    1 bind: function( types, data, fn ) {
    2         return this.on( types, null, data, fn );
    3     }

            对应解绑unband,调用了off。

    1 unbind: function( types, fn ) {
    2         return this.off( types, null, fn );
    3     }
    • 只执行一次的one绑定,赤裸裸调用on。
    1 one: function( types, selector, data, fn ) {
    2         return this.on( types, selector, data, fn, 1 );
    3     }
    • 委托delegate,调用on
    1 delegate: function( selector, types, data, fn ) {
    2         return this.on( types, selector, data, fn );
    3     }

            undelegate调用off

    1 undelegate: function( selector, types, fn ) {
    2         // ( namespace ) or ( selector, types [, fn] )
    3         return arguments.length === 1 ? this.off( selector, "**" ) : this.off( types, selector || "**", fn );
    4     }
    • 最后揭开on的面纱。

    参数:

    • types 事件类型
    • selector 委托中是子元素。(曾经的one中貌似没有这个参数)
    • data 参数
    • fn  事件处理函数
    • one  是否one绑定
     1 on: function( types, selector, data, fn, /*INTERNAL*/ one ) {
     2         var origFn, type;
     3 
     4         // Types can be a map of types/handlers
     5         if ( typeof types === "object" ) {
     6             // ( types-Object, selector, data )
     7             if ( typeof selector !== "string" ) {
     8                 // ( types-Object, data )
     9                 data = data || selector;
    10                 selector = undefined;
    11             }
    12             for ( type in types ) {
    13                 this.on( type, selector, data, types[ type ], one );
    14             }
    15             return this;
    16         }
    17 
    18         if ( data == null && fn == null ) {
    19             // ( types, fn )
    20             fn = selector;
    21             data = selector = undefined;
    22         } else if ( fn == null ) {
    23             if ( typeof selector === "string" ) {
    24                 // ( types, selector, fn )
    25                 fn = data;
    26                 data = undefined;
    27             } else {
    28                 // ( types, data, fn )
    29                 fn = data;
    30                 data = selector;
    31                 selector = undefined;
    32             }
    33         }
    34         if ( fn === false ) {
    35             fn = returnFalse;
    36         } else if ( !fn ) {
    37             return this;
    38         }
    39 
    40         if ( one === 1 ) {
    41             origFn = fn;
    42             fn = function( event ) {
    43                 // Can use an empty set, since event contains the info
    44                 jQuery().off( event );
    45                 return origFn.apply( this, arguments );
    46             };
    47             // Use same guid so caller can remove using origFn
    48             fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
    49         }
    50         return this.each( function() {
    51             jQuery.event.add( this, types, fn, data, selector );
    52         });
    53     }
    on

    对应解绑off

     1 off: function( types, selector, fn ) {
     2         var handleObj, type;
     3         if ( types && types.preventDefault && types.handleObj ) {
     4             // ( event )  dispatched jQuery.Event
     5             handleObj = types.handleObj;
     6             jQuery( types.delegateTarget ).off(
     7                 handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType,
     8                 handleObj.selector,
     9                 handleObj.handler
    10             );
    11             return this;
    12         }
    13         if ( typeof types === "object" ) {
    14             // ( types-object [, selector] )
    15             for ( type in types ) {
    16                 this.off( type, selector, types[ type ] );
    17             }
    18             return this;
    19         }
    20         if ( selector === false || typeof selector === "function" ) {
    21             // ( types [, fn] )
    22             fn = selector;
    23             selector = undefined;
    24         }
    25         if ( fn === false ) {
    26             fn = returnFalse;
    27         }
    28         return this.each(function() {
    29             jQuery.event.remove( this, types, fn, selector );
    30         });
    31     },
    off
  • 相关阅读:
    java中如何使正在运行中的线程退出
    Java如何等待子线程执行结束
    java解析xml几种方式
    【Flask】配置参数
    【Flask】Session
    【Flask】jinja2
    【Flask】Request
    【Flask】Respones
    【Flask】路由系统
    【Flask】认识Flask
  • 原文地址:https://www.cnblogs.com/feitan/p/5348491.html
Copyright © 2011-2022 走看看