【发布时间】:2015-02-28 13:38:06
【问题描述】:
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 docs
当按钮 onclick 处理程序运行时,电子邮件输入字段应该获得焦点,但它没有发生。我发现 react-bootstrap 输入字段类正在将真实的 DOM 输入字段呈现在包装 div 中。这是 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>
所以看起来输入没有获得焦点,因为焦点应用在包装 div 上,它拒绝它(我在控制台中使用document.activeElement 进行检查)。
问题是,如何关注真正的input元素?
注意:
有点无关,但 React 尊重 autoFocus 属性。这在渲染后需要立即设置焦点的情况下很有用。不过,它并不能替代程序化方式。
【问题讨论】:
标签: reactjs react-jsx react-bootstrap