diff --git a/docs/_js/examples/markdown.js b/docs/_js/examples/markdown.js
index ec4363f56ca08..ec70b95503a87 100644
--- a/docs/_js/examples/markdown.js
+++ b/docs/_js/examples/markdown.js
@@ -11,14 +11,14 @@ var MarkdownEditor = React.createClass({\n\
getInitialState: function() {\n\
return {value: 'Type some *markdown* here!'};\n\
},\n\
- handleKeyUp: React.autoBind(function() {\n\
+ handleInput: React.autoBind(function() {\n\
this.setState({value: this.refs.textarea.getDOMNode().value});\n\
}),\n\
render: function() {\n\
return (\n\
diff --git a/src/core/ReactEvent.js b/src/core/ReactEvent.js
index dd2058f368993..702c8816c3c2c 100644
--- a/src/core/ReactEvent.js
+++ b/src/core/ReactEvent.js
@@ -211,6 +211,7 @@ function listenAtTopLevel(touchNotMouse) {
trapBubbledEvent(topLevelTypes.topKeyUp, 'keyup', mountAt);
trapBubbledEvent(topLevelTypes.topKeyPress, 'keypress', mountAt);
trapBubbledEvent(topLevelTypes.topKeyDown, 'keydown', mountAt);
+ trapBubbledEvent(topLevelTypes.topInput, 'input', mountAt);
trapBubbledEvent(topLevelTypes.topChange, 'change', mountAt);
trapBubbledEvent(
topLevelTypes.topDOMCharacterDataModified,
diff --git a/src/event/EventConstants.js b/src/event/EventConstants.js
index 0ce7820a8ee5b..0af7b9d0b29b1 100644
--- a/src/event/EventConstants.js
+++ b/src/event/EventConstants.js
@@ -32,6 +32,7 @@ var topLevelTypes = keyMirror({
topDOMCharacterDataModified: null,
topDoubleClick: null,
topFocus: null,
+ topInput: null,
topKeyDown: null,
topKeyPress: null,
topKeyUp: null,
diff --git a/src/eventPlugins/SimpleEventPlugin.js b/src/eventPlugins/SimpleEventPlugin.js
index 7591ee3542681..0453fde60a5cc 100644
--- a/src/eventPlugins/SimpleEventPlugin.js
+++ b/src/eventPlugins/SimpleEventPlugin.js
@@ -108,6 +108,12 @@ var SimpleEventPlugin = {
captured: keyOf({onKeyDownCapture: true})
}
},
+ input: {
+ phasedRegistrationNames: {
+ bubbled: keyOf({onInput: true}),
+ captured: keyOf({onInputCapture: true})
+ }
+ },
focus: {
phasedRegistrationNames: {
bubbled: keyOf({onFocus: true}),
@@ -220,6 +226,7 @@ SimpleEventPlugin.topLevelTypesToAbstract = {
topKeyUp: SimpleEventPlugin.abstractEventTypes.keyUp,
topKeyPress: SimpleEventPlugin.abstractEventTypes.keyPress,
topKeyDown: SimpleEventPlugin.abstractEventTypes.keyDown,
+ topInput: SimpleEventPlugin.abstractEventTypes.input,
topFocus: SimpleEventPlugin.abstractEventTypes.focus,
topBlur: SimpleEventPlugin.abstractEventTypes.blur,
topScroll: SimpleEventPlugin.abstractEventTypes.scroll,