【发布时间】:2017-01-03 15:12:12
【问题描述】:
是否可以使用focus() 方法聚焦 div(或任何其他元素)?
我已将 tabIndex 设置为 div 元素:
<div ref="dropdown" tabIndex="1"></div>
当我点击它时,我可以看到它得到了焦点,但是,我正在尝试像这样动态地聚焦元素:
setActive(state) {
ReactDOM.findDOMNode(this.refs.dropdown).focus();
}
或者像这样:
this.refs.dropdown.focus();
但是当事件触发时组件没有获得焦点。我怎样才能做到这一点?我可以为此使用任何其他(非输入)元素吗?
编辑:
好吧,看来这实际上是可以做到的:https://jsfiddle.net/69z2wepo/54201/
但这对我不起作用,这是我的完整代码:
class ColorPicker extends React.Component {
constructor(props) {
super(props);
this.state = {
active: false,
value: ""
};
}
selectItem(color) {
this.setState({ value: color, active: false });
}
setActive(state) {
this.setState({ active: state });
this.refs.dropdown.focus();
}
render() {
const { colors, styles, inputName } = this.props;
const pickerClasses = classNames('colorpicker-dropdown', { 'active': this.state.active });
const colorFields = colors.map((color, index) => {
const colorClasses = classNames('colorpicker-item', [`colorpicker-item-${color}`]);
return (
<div onClick={() => { this.selectItem(color) }} key={index} className="colorpicker-item-container">
<div className={colorClasses}></div>
</div>
);
});
return (
<div className="colorpicker">
<input type="text" className={styles} name={inputName} ref="component" value={this.state.value} onFocus={() => { this.setActive(true) }} />
<div onBlur={() => this.setActive(false) } onFocus={() => console.log('focus')} tabIndex="1" ref="dropdown" className={pickerClasses}>
{colorFields}
</div>
</div>
);
}
}
【问题讨论】:
-
你在哪里分配参考?
-
抱歉,更新了,我将 ref 分配给与 tabIndex 相同的 div 元素
-
我在小提琴中尝试了这个,它可以工作jsfiddle.net/69z2wepo/54201,但在我的代码中不起作用,我更新了问题以包含它
标签: javascript reactjs