| 5123 | } |
| 5124 | |
| 5125 | function on( elem, types, selector, data, fn, one ) { |
| 5126 | var origFn, type; |
| 5127 | |
| 5128 | // Types can be a map of types/handlers |
| 5129 | if ( typeof types === "object" ) { |
| 5130 | |
| 5131 | // ( types-Object, selector, data ) |
| 5132 | if ( typeof selector !== "string" ) { |
| 5133 | |
| 5134 | // ( types-Object, data ) |
| 5135 | data = data || selector; |
| 5136 | selector = undefined; |
| 5137 | } |
| 5138 | for ( type in types ) { |
| 5139 | on( elem, type, selector, data, types[ type ], one ); |
| 5140 | } |
| 5141 | return elem; |
| 5142 | } |
| 5143 | |
| 5144 | if ( data == null && fn == null ) { |
| 5145 | |
| 5146 | // ( types, fn ) |
| 5147 | fn = selector; |
| 5148 | data = selector = undefined; |
| 5149 | } else if ( fn == null ) { |
| 5150 | if ( typeof selector === "string" ) { |
| 5151 | |
| 5152 | // ( types, selector, fn ) |
| 5153 | fn = data; |
| 5154 | data = undefined; |
| 5155 | } else { |
| 5156 | |
| 5157 | // ( types, data, fn ) |
| 5158 | fn = data; |
| 5159 | data = selector; |
| 5160 | selector = undefined; |
| 5161 | } |
| 5162 | } |
| 5163 | if ( fn === false ) { |
| 5164 | fn = returnFalse; |
| 5165 | } else if ( !fn ) { |
| 5166 | return elem; |
| 5167 | } |
| 5168 | |
| 5169 | if ( one === 1 ) { |
| 5170 | origFn = fn; |
| 5171 | fn = function( event ) { |
| 5172 | |
| 5173 | // Can use an empty set, since event contains the info |
| 5174 | jQuery().off( event ); |
| 5175 | return origFn.apply( this, arguments ); |
| 5176 | }; |
| 5177 | |
| 5178 | // Use same guid so caller can remove using origFn |
| 5179 | fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); |
| 5180 | } |
| 5181 | return elem.each( function() { |
| 5182 | jQuery.event.add( this, types, fn, data, selector ); |