@@ 4964-5039 (lines=76) @@ | ||
4961 | }, |
|
4962 | ||
4963 | // Detach an event or set of events from an element |
|
4964 | remove: function( elem, types, handler, selector, mappedTypes ) { |
|
4965 | var j, handleObj, tmp, |
|
4966 | origCount, t, events, |
|
4967 | special, handlers, type, |
|
4968 | namespaces, origType, |
|
4969 | elemData = jQuery.hasData( elem ) && jQuery._data( elem ); |
|
4970 | ||
4971 | if ( !elemData || !( events = elemData.events ) ) { |
|
4972 | return; |
|
4973 | } |
|
4974 | ||
4975 | // Once for each type.namespace in types; type may be omitted |
|
4976 | types = ( types || "" ).match( rnotwhite ) || [ "" ]; |
|
4977 | t = types.length; |
|
4978 | while ( t-- ) { |
|
4979 | tmp = rtypenamespace.exec( types[ t ] ) || []; |
|
4980 | type = origType = tmp[ 1 ]; |
|
4981 | namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); |
|
4982 | ||
4983 | // Unbind all events (on this namespace, if provided) for the element |
|
4984 | if ( !type ) { |
|
4985 | for ( type in events ) { |
|
4986 | jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); |
|
4987 | } |
|
4988 | continue; |
|
4989 | } |
|
4990 | ||
4991 | special = jQuery.event.special[ type ] || {}; |
|
4992 | type = ( selector ? special.delegateType : special.bindType ) || type; |
|
4993 | handlers = events[ type ] || []; |
|
4994 | tmp = tmp[ 2 ] && |
|
4995 | new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ); |
|
4996 | ||
4997 | // Remove matching events |
|
4998 | origCount = j = handlers.length; |
|
4999 | while ( j-- ) { |
|
5000 | handleObj = handlers[ j ]; |
|
5001 | ||
5002 | if ( ( mappedTypes || origType === handleObj.origType ) && |
|
5003 | ( !handler || handler.guid === handleObj.guid ) && |
|
5004 | ( !tmp || tmp.test( handleObj.namespace ) ) && |
|
5005 | ( !selector || selector === handleObj.selector || |
|
5006 | selector === "**" && handleObj.selector ) ) { |
|
5007 | handlers.splice( j, 1 ); |
|
5008 | ||
5009 | if ( handleObj.selector ) { |
|
5010 | handlers.delegateCount--; |
|
5011 | } |
|
5012 | if ( special.remove ) { |
|
5013 | special.remove.call( elem, handleObj ); |
|
5014 | } |
|
5015 | } |
|
5016 | } |
|
5017 | ||
5018 | // Remove generic event handler if we removed something and no more handlers exist |
|
5019 | // (avoids potential for endless recursion during removal of special event handlers) |
|
5020 | if ( origCount && !handlers.length ) { |
|
5021 | if ( !special.teardown || |
|
5022 | special.teardown.call( elem, namespaces, elemData.handle ) === false ) { |
|
5023 | ||
5024 | jQuery.removeEvent( elem, type, elemData.handle ); |
|
5025 | } |
|
5026 | ||
5027 | delete events[ type ]; |
|
5028 | } |
|
5029 | } |
|
5030 | ||
5031 | // Remove the expando if it's no longer used |
|
5032 | if ( jQuery.isEmptyObject( events ) ) { |
|
5033 | delete elemData.handle; |
|
5034 | ||
5035 | // removeData also checks for emptiness and clears the expando if empty |
|
5036 | // so use it instead of delete |
|
5037 | jQuery._removeData( elem, "events" ); |
|
5038 | } |
|
5039 | }, |
|
5040 | ||
5041 | trigger: function( event, data, elem, onlyHandlers ) { |
|
5042 | var handle, ontype, cur, |
@@ 4619-4690 (lines=72) @@ | ||
4616 | }, |
|
4617 | ||
4618 | // Detach an event or set of events from an element |
|
4619 | remove: function( elem, types, handler, selector, mappedTypes ) { |
|
4620 | ||
4621 | var j, origCount, tmp, |
|
4622 | events, t, handleObj, |
|
4623 | special, handlers, type, namespaces, origType, |
|
4624 | elemData = dataPriv.hasData( elem ) && dataPriv.get( elem ); |
|
4625 | ||
4626 | if ( !elemData || !( events = elemData.events ) ) { |
|
4627 | return; |
|
4628 | } |
|
4629 | ||
4630 | // Once for each type.namespace in types; type may be omitted |
|
4631 | types = ( types || "" ).match( rnotwhite ) || [ "" ]; |
|
4632 | t = types.length; |
|
4633 | while ( t-- ) { |
|
4634 | tmp = rtypenamespace.exec( types[ t ] ) || []; |
|
4635 | type = origType = tmp[ 1 ]; |
|
4636 | namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); |
|
4637 | ||
4638 | // Unbind all events (on this namespace, if provided) for the element |
|
4639 | if ( !type ) { |
|
4640 | for ( type in events ) { |
|
4641 | jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); |
|
4642 | } |
|
4643 | continue; |
|
4644 | } |
|
4645 | ||
4646 | special = jQuery.event.special[ type ] || {}; |
|
4647 | type = ( selector ? special.delegateType : special.bindType ) || type; |
|
4648 | handlers = events[ type ] || []; |
|
4649 | tmp = tmp[ 2 ] && |
|
4650 | new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ); |
|
4651 | ||
4652 | // Remove matching events |
|
4653 | origCount = j = handlers.length; |
|
4654 | while ( j-- ) { |
|
4655 | handleObj = handlers[ j ]; |
|
4656 | ||
4657 | if ( ( mappedTypes || origType === handleObj.origType ) && |
|
4658 | ( !handler || handler.guid === handleObj.guid ) && |
|
4659 | ( !tmp || tmp.test( handleObj.namespace ) ) && |
|
4660 | ( !selector || selector === handleObj.selector || |
|
4661 | selector === "**" && handleObj.selector ) ) { |
|
4662 | handlers.splice( j, 1 ); |
|
4663 | ||
4664 | if ( handleObj.selector ) { |
|
4665 | handlers.delegateCount--; |
|
4666 | } |
|
4667 | if ( special.remove ) { |
|
4668 | special.remove.call( elem, handleObj ); |
|
4669 | } |
|
4670 | } |
|
4671 | } |
|
4672 | ||
4673 | // Remove generic event handler if we removed something and no more handlers exist |
|
4674 | // (avoids potential for endless recursion during removal of special event handlers) |
|
4675 | if ( origCount && !handlers.length ) { |
|
4676 | if ( !special.teardown || |
|
4677 | special.teardown.call( elem, namespaces, elemData.handle ) === false ) { |
|
4678 | ||
4679 | jQuery.removeEvent( elem, type, elemData.handle ); |
|
4680 | } |
|
4681 | ||
4682 | delete events[ type ]; |
|
4683 | } |
|
4684 | } |
|
4685 | ||
4686 | // Remove data and the expando if it's no longer used |
|
4687 | if ( jQuery.isEmptyObject( events ) ) { |
|
4688 | dataPriv.remove( elem, "handle events" ); |
|
4689 | } |
|
4690 | }, |
|
4691 | ||
4692 | dispatch: function( event ) { |
|
4693 |
@@ 4168-4236 (lines=69) @@ | ||
4165 | }, |
|
4166 | ||
4167 | // Detach an event or set of events from an element |
|
4168 | remove: function( elem, types, handler, selector, mappedTypes ) { |
|
4169 | ||
4170 | var j, origCount, tmp, |
|
4171 | events, t, handleObj, |
|
4172 | special, handlers, type, namespaces, origType, |
|
4173 | elemData = data_priv.hasData( elem ) && data_priv.get( elem ); |
|
4174 | ||
4175 | if ( !elemData || !(events = elemData.events) ) { |
|
4176 | return; |
|
4177 | } |
|
4178 | ||
4179 | // Once for each type.namespace in types; type may be omitted |
|
4180 | types = ( types || "" ).match( rnotwhite ) || [ "" ]; |
|
4181 | t = types.length; |
|
4182 | while ( t-- ) { |
|
4183 | tmp = rtypenamespace.exec( types[t] ) || []; |
|
4184 | type = origType = tmp[1]; |
|
4185 | namespaces = ( tmp[2] || "" ).split( "." ).sort(); |
|
4186 | ||
4187 | // Unbind all events (on this namespace, if provided) for the element |
|
4188 | if ( !type ) { |
|
4189 | for ( type in events ) { |
|
4190 | jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); |
|
4191 | } |
|
4192 | continue; |
|
4193 | } |
|
4194 | ||
4195 | special = jQuery.event.special[ type ] || {}; |
|
4196 | type = ( selector ? special.delegateType : special.bindType ) || type; |
|
4197 | handlers = events[ type ] || []; |
|
4198 | tmp = tmp[2] && new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" ); |
|
4199 | ||
4200 | // Remove matching events |
|
4201 | origCount = j = handlers.length; |
|
4202 | while ( j-- ) { |
|
4203 | handleObj = handlers[ j ]; |
|
4204 | ||
4205 | if ( ( mappedTypes || origType === handleObj.origType ) && |
|
4206 | ( !handler || handler.guid === handleObj.guid ) && |
|
4207 | ( !tmp || tmp.test( handleObj.namespace ) ) && |
|
4208 | ( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) { |
|
4209 | handlers.splice( j, 1 ); |
|
4210 | ||
4211 | if ( handleObj.selector ) { |
|
4212 | handlers.delegateCount--; |
|
4213 | } |
|
4214 | if ( special.remove ) { |
|
4215 | special.remove.call( elem, handleObj ); |
|
4216 | } |
|
4217 | } |
|
4218 | } |
|
4219 | ||
4220 | // Remove generic event handler if we removed something and no more handlers exist |
|
4221 | // (avoids potential for endless recursion during removal of special event handlers) |
|
4222 | if ( origCount && !handlers.length ) { |
|
4223 | if ( !special.teardown || special.teardown.call( elem, namespaces, elemData.handle ) === false ) { |
|
4224 | jQuery.removeEvent( elem, type, elemData.handle ); |
|
4225 | } |
|
4226 | ||
4227 | delete events[ type ]; |
|
4228 | } |
|
4229 | } |
|
4230 | ||
4231 | // Remove the expando if it's no longer used |
|
4232 | if ( jQuery.isEmptyObject( events ) ) { |
|
4233 | delete elemData.handle; |
|
4234 | data_priv.remove( elem, "events" ); |
|
4235 | } |
|
4236 | }, |
|
4237 | ||
4238 | trigger: function( event, data, elem, onlyHandlers ) { |
|
4239 |