annotate default/node_modules/jquery/src/event.js @ 0:1d038bc9b3d2 default tip

Up:default
author Liny <dev@neowd.com>
date Sat, 31 May 2025 09:21:51 +0800
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1 define( [
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
2 "./core",
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
3 "./var/document",
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
4 "./var/documentElement",
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
5 "./var/isFunction",
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
6 "./var/rnothtmlwhite",
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
7 "./var/slice",
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
8 "./data/var/dataPriv",
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
9 "./core/nodeName",
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
10
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
11 "./core/init",
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
12 "./selector"
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
13 ], function( jQuery, document, documentElement, isFunction, rnothtmlwhite,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
14 slice, dataPriv, nodeName ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
15
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
16 "use strict";
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
17
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
18 var
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
19 rkeyEvent = /^key/,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
20 rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
21 rtypenamespace = /^([^.]*)(?:\.(.+)|)/;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
22
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
23 function returnTrue() {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
24 return true;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
25 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
26
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
27 function returnFalse() {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
28 return false;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
29 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
30
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
31 // Support: IE <=9 only
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
32 // See #13393 for more info
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
33 function safeActiveElement() {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
34 try {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
35 return document.activeElement;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
36 } catch ( err ) { }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
37 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
38
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
39 function on( elem, types, selector, data, fn, one ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
40 var origFn, type;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
41
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
42 // Types can be a map of types/handlers
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
43 if ( typeof types === "object" ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
44
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
45 // ( types-Object, selector, data )
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
46 if ( typeof selector !== "string" ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
47
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
48 // ( types-Object, data )
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
49 data = data || selector;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
50 selector = undefined;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
51 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
52 for ( type in types ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
53 on( elem, type, selector, data, types[ type ], one );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
54 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
55 return elem;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
56 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
57
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
58 if ( data == null && fn == null ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
59
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
60 // ( types, fn )
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
61 fn = selector;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
62 data = selector = undefined;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
63 } else if ( fn == null ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
64 if ( typeof selector === "string" ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
65
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
66 // ( types, selector, fn )
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
67 fn = data;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
68 data = undefined;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
69 } else {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
70
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
71 // ( types, data, fn )
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
72 fn = data;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
73 data = selector;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
74 selector = undefined;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
75 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
76 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
77 if ( fn === false ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
78 fn = returnFalse;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
79 } else if ( !fn ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
80 return elem;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
81 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
82
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
83 if ( one === 1 ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
84 origFn = fn;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
85 fn = function( event ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
86
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
87 // Can use an empty set, since event contains the info
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
88 jQuery().off( event );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
89 return origFn.apply( this, arguments );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
90 };
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
91
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
92 // Use same guid so caller can remove using origFn
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
93 fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
94 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
95 return elem.each( function() {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
96 jQuery.event.add( this, types, fn, data, selector );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
97 } );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
98 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
99
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
100 /*
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
101 * Helper functions for managing events -- not part of the public interface.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
102 * Props to Dean Edwards' addEvent library for many of the ideas.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
103 */
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
104 jQuery.event = {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
105
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
106 global: {},
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
107
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
108 add: function( elem, types, handler, data, selector ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
109
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
110 var handleObjIn, eventHandle, tmp,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
111 events, t, handleObj,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
112 special, handlers, type, namespaces, origType,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
113 elemData = dataPriv.get( elem );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
114
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
115 // Don't attach events to noData or text/comment nodes (but allow plain objects)
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
116 if ( !elemData ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
117 return;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
118 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
119
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
120 // Caller can pass in an object of custom data in lieu of the handler
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
121 if ( handler.handler ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
122 handleObjIn = handler;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
123 handler = handleObjIn.handler;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
124 selector = handleObjIn.selector;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
125 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
126
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
127 // Ensure that invalid selectors throw exceptions at attach time
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
128 // Evaluate against documentElement in case elem is a non-element node (e.g., document)
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
129 if ( selector ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
130 jQuery.find.matchesSelector( documentElement, selector );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
131 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
132
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
133 // Make sure that the handler has a unique ID, used to find/remove it later
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
134 if ( !handler.guid ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
135 handler.guid = jQuery.guid++;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
136 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
137
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
138 // Init the element's event structure and main handler, if this is the first
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
139 if ( !( events = elemData.events ) ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
140 events = elemData.events = {};
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
141 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
142 if ( !( eventHandle = elemData.handle ) ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
143 eventHandle = elemData.handle = function( e ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
144
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
145 // Discard the second event of a jQuery.event.trigger() and
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
146 // when an event is called after a page has unloaded
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
147 return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ?
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
148 jQuery.event.dispatch.apply( elem, arguments ) : undefined;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
149 };
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
150 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
151
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
152 // Handle multiple events separated by a space
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
153 types = ( types || "" ).match( rnothtmlwhite ) || [ "" ];
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
154 t = types.length;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
155 while ( t-- ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
156 tmp = rtypenamespace.exec( types[ t ] ) || [];
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
157 type = origType = tmp[ 1 ];
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
158 namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort();
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
159
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
160 // There *must* be a type, no attaching namespace-only handlers
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
161 if ( !type ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
162 continue;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
163 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
164
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
165 // If event changes its type, use the special event handlers for the changed type
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
166 special = jQuery.event.special[ type ] || {};
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
167
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
168 // If selector defined, determine special event api type, otherwise given type
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
169 type = ( selector ? special.delegateType : special.bindType ) || type;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
170
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
171 // Update special based on newly reset type
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
172 special = jQuery.event.special[ type ] || {};
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
173
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
174 // handleObj is passed to all event handlers
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
175 handleObj = jQuery.extend( {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
176 type: type,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
177 origType: origType,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
178 data: data,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
179 handler: handler,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
180 guid: handler.guid,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
181 selector: selector,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
182 needsContext: selector && jQuery.expr.match.needsContext.test( selector ),
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
183 namespace: namespaces.join( "." )
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
184 }, handleObjIn );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
185
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
186 // Init the event handler queue if we're the first
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
187 if ( !( handlers = events[ type ] ) ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
188 handlers = events[ type ] = [];
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
189 handlers.delegateCount = 0;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
190
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
191 // Only use addEventListener if the special events handler returns false
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
192 if ( !special.setup ||
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
193 special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
194
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
195 if ( elem.addEventListener ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
196 elem.addEventListener( type, eventHandle );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
197 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
198 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
199 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
200
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
201 if ( special.add ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
202 special.add.call( elem, handleObj );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
203
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
204 if ( !handleObj.handler.guid ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
205 handleObj.handler.guid = handler.guid;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
206 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
207 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
208
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
209 // Add to the element's handler list, delegates in front
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
210 if ( selector ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
211 handlers.splice( handlers.delegateCount++, 0, handleObj );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
212 } else {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
213 handlers.push( handleObj );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
214 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
215
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
216 // Keep track of which events have ever been used, for event optimization
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
217 jQuery.event.global[ type ] = true;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
218 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
219
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
220 },
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
221
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
222 // Detach an event or set of events from an element
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
223 remove: function( elem, types, handler, selector, mappedTypes ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
224
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
225 var j, origCount, tmp,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
226 events, t, handleObj,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
227 special, handlers, type, namespaces, origType,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
228 elemData = dataPriv.hasData( elem ) && dataPriv.get( elem );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
229
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
230 if ( !elemData || !( events = elemData.events ) ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
231 return;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
232 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
233
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
234 // Once for each type.namespace in types; type may be omitted
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
235 types = ( types || "" ).match( rnothtmlwhite ) || [ "" ];
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
236 t = types.length;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
237 while ( t-- ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
238 tmp = rtypenamespace.exec( types[ t ] ) || [];
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
239 type = origType = tmp[ 1 ];
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
240 namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort();
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
241
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
242 // Unbind all events (on this namespace, if provided) for the element
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
243 if ( !type ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
244 for ( type in events ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
245 jQuery.event.remove( elem, type + types[ t ], handler, selector, true );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
246 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
247 continue;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
248 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
249
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
250 special = jQuery.event.special[ type ] || {};
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
251 type = ( selector ? special.delegateType : special.bindType ) || type;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
252 handlers = events[ type ] || [];
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
253 tmp = tmp[ 2 ] &&
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
254 new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
255
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
256 // Remove matching events
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
257 origCount = j = handlers.length;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
258 while ( j-- ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
259 handleObj = handlers[ j ];
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
260
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
261 if ( ( mappedTypes || origType === handleObj.origType ) &&
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
262 ( !handler || handler.guid === handleObj.guid ) &&
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
263 ( !tmp || tmp.test( handleObj.namespace ) ) &&
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
264 ( !selector || selector === handleObj.selector ||
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
265 selector === "**" && handleObj.selector ) ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
266 handlers.splice( j, 1 );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
267
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
268 if ( handleObj.selector ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
269 handlers.delegateCount--;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
270 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
271 if ( special.remove ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
272 special.remove.call( elem, handleObj );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
273 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
274 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
275 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
276
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
277 // Remove generic event handler if we removed something and no more handlers exist
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
278 // (avoids potential for endless recursion during removal of special event handlers)
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
279 if ( origCount && !handlers.length ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
280 if ( !special.teardown ||
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
281 special.teardown.call( elem, namespaces, elemData.handle ) === false ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
282
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
283 jQuery.removeEvent( elem, type, elemData.handle );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
284 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
285
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
286 delete events[ type ];
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
287 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
288 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
289
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
290 // Remove data and the expando if it's no longer used
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
291 if ( jQuery.isEmptyObject( events ) ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
292 dataPriv.remove( elem, "handle events" );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
293 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
294 },
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
295
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
296 dispatch: function( nativeEvent ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
297
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
298 // Make a writable jQuery.Event from the native event object
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
299 var event = jQuery.event.fix( nativeEvent );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
300
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
301 var i, j, ret, matched, handleObj, handlerQueue,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
302 args = new Array( arguments.length ),
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
303 handlers = ( dataPriv.get( this, "events" ) || {} )[ event.type ] || [],
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
304 special = jQuery.event.special[ event.type ] || {};
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
305
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
306 // Use the fix-ed jQuery.Event rather than the (read-only) native event
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
307 args[ 0 ] = event;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
308
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
309 for ( i = 1; i < arguments.length; i++ ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
310 args[ i ] = arguments[ i ];
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
311 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
312
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
313 event.delegateTarget = this;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
314
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
315 // Call the preDispatch hook for the mapped type, and let it bail if desired
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
316 if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
317 return;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
318 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
319
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
320 // Determine handlers
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
321 handlerQueue = jQuery.event.handlers.call( this, event, handlers );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
322
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
323 // Run delegates first; they may want to stop propagation beneath us
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
324 i = 0;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
325 while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
326 event.currentTarget = matched.elem;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
327
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
328 j = 0;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
329 while ( ( handleObj = matched.handlers[ j++ ] ) &&
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
330 !event.isImmediatePropagationStopped() ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
331
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
332 // Triggered event must either 1) have no namespace, or 2) have namespace(s)
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
333 // a subset or equal to those in the bound event (both can have no namespace).
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
334 if ( !event.rnamespace || event.rnamespace.test( handleObj.namespace ) ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
335
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
336 event.handleObj = handleObj;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
337 event.data = handleObj.data;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
338
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
339 ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
340 handleObj.handler ).apply( matched.elem, args );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
341
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
342 if ( ret !== undefined ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
343 if ( ( event.result = ret ) === false ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
344 event.preventDefault();
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
345 event.stopPropagation();
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
346 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
347 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
348 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
349 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
350 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
351
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
352 // Call the postDispatch hook for the mapped type
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
353 if ( special.postDispatch ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
354 special.postDispatch.call( this, event );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
355 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
356
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
357 return event.result;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
358 },
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
359
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
360 handlers: function( event, handlers ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
361 var i, handleObj, sel, matchedHandlers, matchedSelectors,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
362 handlerQueue = [],
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
363 delegateCount = handlers.delegateCount,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
364 cur = event.target;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
365
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
366 // Find delegate handlers
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
367 if ( delegateCount &&
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
368
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
369 // Support: IE <=9
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
370 // Black-hole SVG <use> instance trees (trac-13180)
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
371 cur.nodeType &&
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
372
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
373 // Support: Firefox <=42
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
374 // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
375 // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
376 // Support: IE 11 only
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
377 // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343)
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
378 !( event.type === "click" && event.button >= 1 ) ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
379
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
380 for ( ; cur !== this; cur = cur.parentNode || this ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
381
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
382 // Don't check non-elements (#13208)
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
383 // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
384 if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
385 matchedHandlers = [];
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
386 matchedSelectors = {};
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
387 for ( i = 0; i < delegateCount; i++ ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
388 handleObj = handlers[ i ];
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
389
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
390 // Don't conflict with Object.prototype properties (#13203)
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
391 sel = handleObj.selector + " ";
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
392
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
393 if ( matchedSelectors[ sel ] === undefined ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
394 matchedSelectors[ sel ] = handleObj.needsContext ?
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
395 jQuery( sel, this ).index( cur ) > -1 :
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
396 jQuery.find( sel, this, null, [ cur ] ).length;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
397 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
398 if ( matchedSelectors[ sel ] ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
399 matchedHandlers.push( handleObj );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
400 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
401 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
402 if ( matchedHandlers.length ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
403 handlerQueue.push( { elem: cur, handlers: matchedHandlers } );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
404 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
405 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
406 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
407 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
408
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
409 // Add the remaining (directly-bound) handlers
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
410 cur = this;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
411 if ( delegateCount < handlers.length ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
412 handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
413 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
414
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
415 return handlerQueue;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
416 },
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
417
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
418 addProp: function( name, hook ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
419 Object.defineProperty( jQuery.Event.prototype, name, {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
420 enumerable: true,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
421 configurable: true,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
422
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
423 get: isFunction( hook ) ?
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
424 function() {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
425 if ( this.originalEvent ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
426 return hook( this.originalEvent );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
427 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
428 } :
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
429 function() {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
430 if ( this.originalEvent ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
431 return this.originalEvent[ name ];
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
432 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
433 },
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
434
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
435 set: function( value ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
436 Object.defineProperty( this, name, {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
437 enumerable: true,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
438 configurable: true,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
439 writable: true,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
440 value: value
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
441 } );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
442 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
443 } );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
444 },
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
445
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
446 fix: function( originalEvent ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
447 return originalEvent[ jQuery.expando ] ?
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
448 originalEvent :
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
449 new jQuery.Event( originalEvent );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
450 },
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
451
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
452 special: {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
453 load: {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
454
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
455 // Prevent triggered image.load events from bubbling to window.load
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
456 noBubble: true
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
457 },
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
458 focus: {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
459
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
460 // Fire native event if possible so blur/focus sequence is correct
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
461 trigger: function() {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
462 if ( this !== safeActiveElement() && this.focus ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
463 this.focus();
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
464 return false;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
465 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
466 },
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
467 delegateType: "focusin"
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
468 },
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
469 blur: {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
470 trigger: function() {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
471 if ( this === safeActiveElement() && this.blur ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
472 this.blur();
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
473 return false;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
474 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
475 },
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
476 delegateType: "focusout"
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
477 },
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
478 click: {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
479
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
480 // For checkbox, fire native event so checked state will be right
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
481 trigger: function() {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
482 if ( this.type === "checkbox" && this.click && nodeName( this, "input" ) ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
483 this.click();
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
484 return false;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
485 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
486 },
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
487
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
488 // For cross-browser consistency, don't fire native .click() on links
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
489 _default: function( event ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
490 return nodeName( event.target, "a" );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
491 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
492 },
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
493
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
494 beforeunload: {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
495 postDispatch: function( event ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
496
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
497 // Support: Firefox 20+
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
498 // Firefox doesn't alert if the returnValue field is not set.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
499 if ( event.result !== undefined && event.originalEvent ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
500 event.originalEvent.returnValue = event.result;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
501 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
502 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
503 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
504 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
505 };
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
506
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
507 jQuery.removeEvent = function( elem, type, handle ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
508
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
509 // This "if" is needed for plain objects
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
510 if ( elem.removeEventListener ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
511 elem.removeEventListener( type, handle );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
512 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
513 };
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
514
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
515 jQuery.Event = function( src, props ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
516
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
517 // Allow instantiation without the 'new' keyword
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
518 if ( !( this instanceof jQuery.Event ) ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
519 return new jQuery.Event( src, props );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
520 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
521
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
522 // Event object
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
523 if ( src && src.type ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
524 this.originalEvent = src;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
525 this.type = src.type;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
526
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
527 // Events bubbling up the document may have been marked as prevented
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
528 // by a handler lower down the tree; reflect the correct value.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
529 this.isDefaultPrevented = src.defaultPrevented ||
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
530 src.defaultPrevented === undefined &&
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
531
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
532 // Support: Android <=2.3 only
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
533 src.returnValue === false ?
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
534 returnTrue :
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
535 returnFalse;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
536
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
537 // Create target properties
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
538 // Support: Safari <=6 - 7 only
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
539 // Target should not be a text node (#504, #13143)
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
540 this.target = ( src.target && src.target.nodeType === 3 ) ?
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
541 src.target.parentNode :
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
542 src.target;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
543
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
544 this.currentTarget = src.currentTarget;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
545 this.relatedTarget = src.relatedTarget;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
546
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
547 // Event type
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
548 } else {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
549 this.type = src;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
550 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
551
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
552 // Put explicitly provided properties onto the event object
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
553 if ( props ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
554 jQuery.extend( this, props );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
555 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
556
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
557 // Create a timestamp if incoming event doesn't have one
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
558 this.timeStamp = src && src.timeStamp || Date.now();
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
559
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
560 // Mark it as fixed
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
561 this[ jQuery.expando ] = true;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
562 };
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
563
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
564 // jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
565 // https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
566 jQuery.Event.prototype = {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
567 constructor: jQuery.Event,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
568 isDefaultPrevented: returnFalse,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
569 isPropagationStopped: returnFalse,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
570 isImmediatePropagationStopped: returnFalse,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
571 isSimulated: false,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
572
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
573 preventDefault: function() {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
574 var e = this.originalEvent;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
575
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
576 this.isDefaultPrevented = returnTrue;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
577
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
578 if ( e && !this.isSimulated ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
579 e.preventDefault();
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
580 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
581 },
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
582 stopPropagation: function() {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
583 var e = this.originalEvent;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
584
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
585 this.isPropagationStopped = returnTrue;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
586
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
587 if ( e && !this.isSimulated ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
588 e.stopPropagation();
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
589 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
590 },
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
591 stopImmediatePropagation: function() {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
592 var e = this.originalEvent;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
593
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
594 this.isImmediatePropagationStopped = returnTrue;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
595
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
596 if ( e && !this.isSimulated ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
597 e.stopImmediatePropagation();
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
598 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
599
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
600 this.stopPropagation();
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
601 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
602 };
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
603
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
604 // Includes all common event props including KeyEvent and MouseEvent specific props
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
605 jQuery.each( {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
606 altKey: true,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
607 bubbles: true,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
608 cancelable: true,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
609 changedTouches: true,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
610 ctrlKey: true,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
611 detail: true,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
612 eventPhase: true,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
613 metaKey: true,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
614 pageX: true,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
615 pageY: true,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
616 shiftKey: true,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
617 view: true,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
618 "char": true,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
619 charCode: true,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
620 key: true,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
621 keyCode: true,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
622 button: true,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
623 buttons: true,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
624 clientX: true,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
625 clientY: true,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
626 offsetX: true,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
627 offsetY: true,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
628 pointerId: true,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
629 pointerType: true,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
630 screenX: true,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
631 screenY: true,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
632 targetTouches: true,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
633 toElement: true,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
634 touches: true,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
635
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
636 which: function( event ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
637 var button = event.button;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
638
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
639 // Add which for key events
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
640 if ( event.which == null && rkeyEvent.test( event.type ) ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
641 return event.charCode != null ? event.charCode : event.keyCode;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
642 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
643
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
644 // Add which for click: 1 === left; 2 === middle; 3 === right
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
645 if ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
646 if ( button & 1 ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
647 return 1;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
648 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
649
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
650 if ( button & 2 ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
651 return 3;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
652 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
653
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
654 if ( button & 4 ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
655 return 2;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
656 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
657
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
658 return 0;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
659 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
660
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
661 return event.which;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
662 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
663 }, jQuery.event.addProp );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
664
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
665 // Create mouseenter/leave events using mouseover/out and event-time checks
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
666 // so that event delegation works in jQuery.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
667 // Do the same for pointerenter/pointerleave and pointerover/pointerout
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
668 //
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
669 // Support: Safari 7 only
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
670 // Safari sends mouseenter too often; see:
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
671 // https://bugs.chromium.org/p/chromium/issues/detail?id=470258
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
672 // for the description of the bug (it existed in older Chrome versions as well).
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
673 jQuery.each( {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
674 mouseenter: "mouseover",
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
675 mouseleave: "mouseout",
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
676 pointerenter: "pointerover",
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
677 pointerleave: "pointerout"
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
678 }, function( orig, fix ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
679 jQuery.event.special[ orig ] = {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
680 delegateType: fix,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
681 bindType: fix,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
682
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
683 handle: function( event ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
684 var ret,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
685 target = this,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
686 related = event.relatedTarget,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
687 handleObj = event.handleObj;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
688
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
689 // For mouseenter/leave call the handler if related is outside the target.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
690 // NB: No relatedTarget if the mouse left/entered the browser window
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
691 if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
692 event.type = handleObj.origType;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
693 ret = handleObj.handler.apply( this, arguments );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
694 event.type = fix;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
695 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
696 return ret;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
697 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
698 };
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
699 } );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
700
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
701 jQuery.fn.extend( {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
702
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
703 on: function( types, selector, data, fn ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
704 return on( this, types, selector, data, fn );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
705 },
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
706 one: function( types, selector, data, fn ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
707 return on( this, types, selector, data, fn, 1 );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
708 },
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
709 off: function( types, selector, fn ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
710 var handleObj, type;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
711 if ( types && types.preventDefault && types.handleObj ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
712
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
713 // ( event ) dispatched jQuery.Event
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
714 handleObj = types.handleObj;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
715 jQuery( types.delegateTarget ).off(
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
716 handleObj.namespace ?
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
717 handleObj.origType + "." + handleObj.namespace :
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
718 handleObj.origType,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
719 handleObj.selector,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
720 handleObj.handler
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
721 );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
722 return this;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
723 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
724 if ( typeof types === "object" ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
725
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
726 // ( types-object [, selector] )
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
727 for ( type in types ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
728 this.off( type, selector, types[ type ] );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
729 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
730 return this;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
731 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
732 if ( selector === false || typeof selector === "function" ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
733
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
734 // ( types [, fn] )
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
735 fn = selector;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
736 selector = undefined;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
737 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
738 if ( fn === false ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
739 fn = returnFalse;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
740 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
741 return this.each( function() {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
742 jQuery.event.remove( this, types, fn, selector );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
743 } );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
744 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
745 } );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
746
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
747 return jQuery;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
748 } );