是否可以使用该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>
);
}
}
每当您设置状态时,React都会重绘组件,这意味着组件会失去焦点。在这种情况下,如果要基于prop或state元素集中元素,则可以使用componentDidUpdate
or
componentDidMount
方法。
请记住,按照阵营生命周期的文档,componentDidMount
将只呈现组件首次在屏幕上以后的事情了,而在此调用componentDidUpdate
不会发生,那么对于每一个新的setState
,forceUpdate
电话或组件容纳新的道具componentDidUpdate
会出现通话。
componentDidMount() {
this.focusDiv();
},
componentDidUpdate() {
if(this.state.active)
this.focusDiv();
},
focusDiv() {
ReactDOM.findDOMNode(this.refs.theDiv).focus();
}
这是您可以使用的JS小提琴。
我正在使用纯普通JavaScript创建一个HTML表单,其效果与SurveyMonkey.com/r/online-product-feedbed-survey-template-new类似 我想实现的是让我的表单题的不透明度变轻,让一个屏幕上的题不透明度:0;以便在上下滚动时,从用户获得焦点并使该表单的所有其他问题变暗,这将是完全可见的。 为此,我尝试了我的代码后,从不同的资源得到不同的提示,
问题内容: 我真的很惊讶,我在网上找不到使用Selenium Webdriver测试元素焦点的参考。 我想检查何时尝试提交表单而缺少必填字段时,焦点移到了空白字段。但是我看不到任何使用WebDriver API的方法。 我将能够使用JavascriptExecutor找到关注的元素。但是,阅读FAQ使我认为必须有某种方法可以使用驱动程序本身执行检查。 谢谢你的帮助。 问题答案: 将返回当前的焦点。
问题内容: 我正在尝试使用React refs在安装时聚焦Redux-Form字段。 当我尝试时,会抛出一个错误: 当我console.log this.refs时,它通常是一个空对象,有时将’title’标识为ref,但它不是可靠的。 我是否正确使用了引用?我的代码在下面供参考。 … 问题答案: 请尝试使用回调函数设置ref: 然后使用它来获取基础的DOM节点: DOM输入元素是否包装在另一个元
我使用材质UI文本字段 我想实现一个自动对焦,我找不到一种方法通过设置而不是通过编程来实现。有什么帮助吗?
我试图使用React参考来聚焦Redux-Form字段,当它安装时。 当我尝试在,一个错误抛出说: 当我安慰的时候。记录这个。refs,它主要是一个空对象,有时将“title”标识为ref,但它不可靠。 我是否错误地使用了refs?下面是我的代码供参考。 ...
当用户点击某个元素或使用键盘上的 Tab 键选中时,该元素将会获得聚焦(focus)。还有一个 HTML 特性(attribute)autofocus 可以让焦点在网页加载时默认落在一个元素上,此外还有其它途径可以获得焦点。 聚焦到一个元素通常意味着:“准备在此处接受数据”,所以,这正是我们可以运行代码以初始化所需功能的时刻。 失去焦点的时刻(“blur”)可能更为重要。它可能发生在用户点击页面的