javascript - Reactjs:使用 .blur() 使按钮元素失焦
问题描述
我在学习反应时遇到了一个小问题——我想取消焦点(又名blur()
)一个按钮 DOM 元素,但由于某种原因,这不太有效。
我认为从我所读到的问题是关于 reactstrapButton
组件的使用:
<Button className={buttonClass} onClick={this.handleCopyToClipboardClick} ref={this.buttonBlurRef}>
<div className="d-flex justify-content-between">
<span></span>
<span>{ this.state.hasCopiedToClipboard ? 'Copied to clipboard!' : this.state.buttonText }</span>
<span><FontAwesomeIcon icon="copy" /></span>
</div>
</Button>
我在一个组件上绑定一个 ref?我认为这就是它不起作用的原因。
该onClick
功能正在运行,我已将其包含在下面。我已经从我尝试过的东西中添加了一些注释掉的代码——所有这些都破坏了handleCopyToClipboardClick
函数。
handleCopyToClipboardClick() {
this.setState(state => ({
hasCopiedToClipboard: !state.hasCopiedToClipboard
}));
// this.buttonBlurRef.current.blur(); <= This isn't working
// this.buttonBlurRef.blur(); <= This isn't working either
// this.refs.buttonBlurRef.current.blur(); <= Or this
// this.refs.buttonBlurRef.blur(); <= Nor this... :'(
setTimeout(
function() {
this.setState(state => ({
hasCopiedToClipboard: !state.hasCopiedToClipboard
}));
}.bind(this),
1500
);
}
这也是我的组件构造函数:
constructor(props) {
super(props);
this.buttonBlurRef = React.createRef();
this.state = {
hasCopiedToClipboard: false,
};
this.handleCopyToClipboardClick = this.handleCopyToClipboardClick.bind(this);
}
任何关于我如何可能使我的 Bootstrap 不专注的建议Button
都会很棒!:)
解决方案
您的文档中有一个activeElement
属性,因此您可能只需调用document.activeElement.blur()
它就可以了。您也可以尝试换一种方式,而不是在您的元素上调用模糊 - 调用焦点在其他一些上,例如整个文档:window.focus()
或document.body.focus()
. 希望这可以帮助
推荐阅读
- sql - SQL Developer 更改特定列的日期格式
- javascript - 不确定这种格式的含义
- javascript - 如何正确使用 Firestore
- sql - Google Bigquery,获取特定时区一周的开始和结束
- linux - 结合linux中的几个“find”命令
- google-maps - xamarin:如何处理图像点击谷歌地图信息窗口在android中点击
- elm - 这个 `div` 调用产生: Html (String -> Msg) 但是 `view` 上的类型注释说它应该是: Html Msg
- c++ - 我的最大二进制堆中的 C++ 轮询操作工作非常缓慢
- matlab - 如何用 for 循环的答案填充零向量?
- c# - 调试 Akka.NET 远程连接(无法连接 - 绑定失败)