Description
When an input element is "controlled" by a model, the cursor will jump to the end of the line on every change. This makes it impossible to edit text that is not at the end of the input.
A quick demo: https://gist.github.com/ericvicenti/46f97f47c1cfe46040c8
var ExampleApplication = React.createClass({
render: function() {
var model = this.props.model;
return <input onChange={this.nameChange} value={model.name} />;
},
nameChange: function(evt) {
this.props.model.name = evt.target.value;
}
});
var myModel = {
name: 'Input is funky'
};
setInterval(function() {
React.renderComponent(
<ExampleApplication model={myModel} />,
document.getElementById('container')
);
}, 50);
It should be noted that this is only when using an external model, not when using the view's state. Maybe there is something wrong with my usage here?
As a suggested fix, maybe the input should not be overridden unless the value differs? Otherwise, the cursor position should be manually preserved.
Also, see this SO entry which documents the ability to grab and preserve the cursor position: http://stackoverflow.com/questions/1080532/prevent-default-behavior-in-text-input-while-pressing-arrow-up