@samitouri / QOS-React-2 / commits / c692d9e844
Fork 0

The library for web and native user interfaces.

Fix ChangeEventPlugin for IE8 and IE9

This fixes a bug with `ChangeEventPlugin` in IE8 and IE9. The extend of this bug includes: - On IE8, not firing `onChange` immediately after `value` of an input is changed. - On IE9, not firing `onChange` when backspacing.

Tim Yung committed Jul 3, 2013 at 11:33 UTC c692d9e84421447b65fd23d31ac16b81fa055005
1 file changed +14 -4
src/eventPlugins/ChangeEventPlugin.js
+14 -4
@@ -242,7 +242,7 @@ function getTargetIDForInputEvent(
242 }
243 }
244
245 -// For IE8 and IE9
245 +// For IE8 and IE9.
246 function handleEventsForInputEventIE(
247 topLevelType,
248 topLevelTarget,
@@ -265,8 +265,15 @@ function handleEventsForInputEventIE(
265 startWatchingForValueChange(topLevelTarget, topLevelTargetID);
266 } else if (topLevelType === topLevelTypes.topBlur) {
267 stopWatchingForValueChange();
268 - } else if (
269 - topLevelType === topLevelTypes.topSelectionChange ||
268 + }
269 +}
270 +
271 +// For IE8 and IE9.
272 +function getTargetIDForInputEventIE(
273 + topLevelType,
274 + topLevelTarget,
275 + topLevelTargetID) {
276 + if (topLevelType === topLevelTypes.topSelectionChange ||
277 topLevelType === topLevelTypes.topKeyUp ||
278 topLevelType === topLevelTypes.topKeyDown) {
279 // On the selectionchange event, the target is just document which isn't
@@ -348,6 +355,7 @@ var ChangeEventPlugin = {
355 if (isInputEventSupported) {
356 getTargetIDFunc = getTargetIDForInputEvent;
357 } else {
358 + getTargetIDFunc = getTargetIDForInputEventIE;
359 handleEventFunc = handleEventsForInputEventIE;
360 }
361 } else if (shouldUseClickEvent(topLevelTarget)) {
@@ -369,7 +377,9 @@ var ChangeEventPlugin = {
377 EventPropagators.accumulateTwoPhaseDispatches(event);
378 return event;
379 }
372 - } else if (handleEventFunc) {
380 + }
381 +
382 + if (handleEventFunc) {
383 handleEventFunc(
384 topLevelType,
385 topLevelTarget,