| 4439 | } |
| 4440 | |
| 4441 | function on( elem, types, selector, data, fn, one ) { |
| 4442 | var origFn, type; |
| 4443 | |
| 4444 | // Types can be a map of types/handlers |
| 4445 | if ( typeof types === "object" ) { |
| 4446 | |
| 4447 | // ( types-Object, selector, data ) |
| 4448 | if ( typeof selector !== "string" ) { |
| 4449 | |
| 4450 | // ( types-Object, data ) |
| 4451 | data = data || selector; |
| 4452 | selector = undefined; |
| 4453 | } |
| 4454 | for ( type in types ) { |
| 4455 | on( elem, type, selector, data, types[ type ], one ); |
| 4456 | } |
| 4457 | return elem; |
| 4458 | } |
| 4459 | |
| 4460 | if ( data == null && fn == null ) { |
| 4461 | |
| 4462 | // ( types, fn ) |
| 4463 | fn = selector; |
| 4464 | data = selector = undefined; |
| 4465 | } else if ( fn == null ) { |
| 4466 | if ( typeof selector === "string" ) { |
| 4467 | |
| 4468 | // ( types, selector, fn ) |
| 4469 | fn = data; |
| 4470 | data = undefined; |
| 4471 | } else { |
| 4472 | |
| 4473 | // ( types, data, fn ) |
| 4474 | fn = data; |
| 4475 | data = selector; |
| 4476 | selector = undefined; |
| 4477 | } |
| 4478 | } |
| 4479 | if ( fn === false ) { |
| 4480 | fn = returnFalse; |
| 4481 | } else if ( !fn ) { |
| 4482 | return elem; |
| 4483 | } |
| 4484 | |
| 4485 | if ( one === 1 ) { |
| 4486 | origFn = fn; |
| 4487 | fn = function( event ) { |
| 4488 | |
| 4489 | // Can use an empty set, since event contains the info |
| 4490 | jQuery().off( event ); |
| 4491 | return origFn.apply( this, arguments ); |
| 4492 | }; |
| 4493 | |
| 4494 | // Use same guid so caller can remove using origFn |
| 4495 | fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); |
| 4496 | } |
| 4497 | return elem.each( function() { |
| 4498 | jQuery.event.add( this, types, fn, data, selector ); |