JSX:
var Button = require("react-bootstrap").Button;
var Input = require("react-bootstrap").Input;
var MyClass = React.createClass({
onclick: function () {
this.refs.email.getDOMNode().focus();
console.log('DOM element', this.refs.email.getDOMNode());
}
render: function () {
return (
<div>
<Button onClick={this.onlick}>Login</Button>
<Input ref='email' type='email' />
</div>
);
},
});
注意:
- 该输入区域是一个
react-bootstrap.Input
类。 getDOMNode().focus()
的概念来自于Facebook React文档。
当单击按钮时,应该将焦点设置在电子邮件输入区域,但实际上没有发生。我发现react-bootstrap的Input字段类在外围包装了真正的DOM输入区域。这是console.log的输出:
<div class="form-group" data-reactid=".1awy8d4e9kw.1.3.$=1$3:0.0.0.1.0">
<input class="form-control" type="email" data-reactid=".1awy8d4e9kw.1.3.$=1$3:0.0.0.1.0.1:$input">
</div>
看起来输入框没有获取到焦点,因为焦点被应用在包裹的
上面了,导致被拒绝(我在控制台中使用
document.activeElement
进行检查)。
问题是,如何将焦点聚焦在真正的input
元素上?
注意:有点无关紧要,但React尊重autoFocus
属性。这在需要在渲染后立即设置焦点时非常有用。然而,它不能代替程序化的方法。
React.findDOMNode()
,而在React 0.14之后,则应使用ReactDOM.findDOMNode()
。 - Special Character