Check for selection on keyup instead of deferring
This is essentially what we do for the change event in IE8 and IE9 already.
Ben Alpert committed
Dec 31, 2013 at 17:42 UTC
09c8ec51bf28aab80b5b0dc23973fe32472f14d1
1 file changed
+6
-36
src/eventPlugins/SelectEventPlugin.js
+6
-36
@@ -19,9 +19,7 @@
19
"use strict";
20
21
var EventConstants = require('EventConstants');
22
-var EventPluginHub = require('EventPluginHub');
22
var EventPropagators = require('EventPropagators');
24
-var ExecutionEnvironment = require('ExecutionEnvironment');
23
var ReactInputSelection = require('ReactInputSelection');
24
var SyntheticEvent = require('SyntheticEvent');
25
@@ -49,15 +47,8 @@ var eventTypes = {
47
}
48
};
49
52
-var useSelectionChange = false;
53
-
54
-if (ExecutionEnvironment.canUseDOM) {
55
- useSelectionChange = 'onselectionchange' in document;
56
-}
57
-
50
var activeElement = null;
51
var activeElementID = null;
60
-var activeNativeEvent = null;
52
var lastSelection = null;
53
var mouseDown = false;
54
@@ -129,24 +120,6 @@ function constructSelectEvent(nativeEvent) {
120
}
121
}
122
132
-/**
133
- * Handle deferred event. And manually dispatch synthetic events.
134
- */
135
-function dispatchDeferredSelectEvent() {
136
- if (!activeNativeEvent) {
137
- return;
138
- }
139
-
140
- var syntheticEvent = constructSelectEvent(activeNativeEvent);
141
- activeNativeEvent = null;
142
-
143
- // Enqueue and process the abstract event manually.
144
- if (syntheticEvent) {
145
- EventPluginHub.enqueueEvents(syntheticEvent);
146
- EventPluginHub.processEventQueue();
147
- }
148
-}
149
-
123
/**
124
* This plugin creates an `onSelect` event that normalizes select events
125
* across form elements.
@@ -207,17 +180,14 @@ var SelectEventPlugin = {
180
181
// Chrome and IE fire non-standard event when selection is changed (and
182
// sometimes when it hasn't).
210
- case topLevelTypes.topSelectionChange:
211
- return constructSelectEvent(nativeEvent);
212
-
183
// Firefox doesn't support selectionchange, so check selection status
214
- // after each key entry.
184
+ // after each key entry. The selection changes after keydown and before
185
+ // keyup, but we check on keydown as well in the case of holding down a
186
+ // key, when multiple keydown events are fired but only one keyup is.
187
+ case topLevelTypes.topSelectionChange:
188
case topLevelTypes.topKeyDown:
216
- if (!useSelectionChange) {
217
- activeNativeEvent = nativeEvent;
218
- setTimeout(dispatchDeferredSelectEvent, 0);
219
- }
220
- break;
189
+ case topLevelTypes.topKeyUp:
190
+ return constructSelectEvent(nativeEvent);
191
}
192
}
193
};