| 4903 | } |
| 4904 | |
| 4905 | function on( elem, types, selector, data, fn, one ) { |
| 4906 | var origFn, type; |
| 4907 | |
| 4908 | // Types can be a map of types/handlers |
| 4909 | if ( typeof types === "object" ) { |
| 4910 | |
| 4911 | // ( types-Object, selector, data ) |
| 4912 | if ( typeof selector !== "string" ) { |
| 4913 | |
| 4914 | // ( types-Object, data ) |
| 4915 | data = data || selector; |
| 4916 | selector = undefined; |
| 4917 | } |
| 4918 | for ( type in types ) { |
| 4919 | on( elem, type, selector, data, types[ type ], one ); |
| 4920 | } |
| 4921 | return elem; |
| 4922 | } |
| 4923 | |
| 4924 | if ( data == null && fn == null ) { |
| 4925 | |
| 4926 | // ( types, fn ) |
| 4927 | fn = selector; |
| 4928 | data = selector = undefined; |
| 4929 | } else if ( fn == null ) { |
| 4930 | if ( typeof selector === "string" ) { |
| 4931 | |
| 4932 | // ( types, selector, fn ) |
| 4933 | fn = data; |
| 4934 | data = undefined; |
| 4935 | } else { |
| 4936 | |
| 4937 | // ( types, data, fn ) |
| 4938 | fn = data; |
| 4939 | data = selector; |
| 4940 | selector = undefined; |
| 4941 | } |
| 4942 | } |
| 4943 | if ( fn === false ) { |
| 4944 | fn = returnFalse; |
| 4945 | } else if ( !fn ) { |
| 4946 | return elem; |
| 4947 | } |
| 4948 | |
| 4949 | if ( one === 1 ) { |
| 4950 | origFn = fn; |
| 4951 | fn = function( event ) { |
| 4952 | |
| 4953 | // Can use an empty set, since event contains the info |
| 4954 | jQuery().off( event ); |
| 4955 | return origFn.apply( this, arguments ); |
| 4956 | }; |
| 4957 | |
| 4958 | // Use same guid so caller can remove using origFn |
| 4959 | fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); |
| 4960 | } |
| 4961 | return elem.each( function() { |
| 4962 | jQuery.event.add( this, types, fn, data, selector ); |