javascript - 再次按回车点击按钮
问题描述
我有这个按钮,我单击它来打印文档。但问题是我认为它保持焦点,如果我错误地按下回车键,它会再次打印{基本上按钮再次按下回车键。我已经在使用 e.preventDefault() 所以我不知道它为什么这样做。是否有可能消除这种行为?
基本上我只希望 handleOrderPrint() 在点击时运行,而不是在按下 Enter 键时运行。
<Button onClick={e => handleOrderPrint(e)} type="primary">Print</Button>}
const handleOrderPrint = (e: any) => {
e.preventDefault();
ipcRenderer.send('generatePickingDocs', order);
setPrinted(true);
};
编辑----------------> 已经尝试过这个:
const btnEl = React.useRef(null);
const handleOrderPrint = (e: any) => {
e.preventDefault();
if (e.keyCode !== 13) {
console.log("Keycode", e.keyCode);
ipcRenderer.send('generatePickingDocs', order);
setPrinted(true);
}
};
<Button ref={btnEl} onClick={e => handleOrderPrint(e)} type="primary">Print</Button>
解决方案
添加onKeyPress
处理程序并检查是否Enter按下了键。使用Event.preventDefault()
.
const { useRef, useEffect } = React;
const App = (props) => {
const ref = useRef();
// set focus to button for testing
useEffect(() => ref.current.focus(), []);
const print = msg => console.log(msg);
const handleClick = e => print('Printing...');
const handleKeyPress = e => {
if (e.key === 'Enter') {
e.preventDefault();
return;
}
}
return (
<div>
<button
ref={ref}
onKeyPress={handleKeyPress}
onClick={handleClick}
>
Print
</button>
</div>
);
};
// Render it
ReactDOM.render(
<App />,
document.getElementById("react")
);
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.8.4/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.8.4/umd/react-dom.production.min.js"></script>
<div id="react"></div>
推荐阅读
- npm - 在 laravel 框架“Pip install npm”中安装 npm 时出现问题
- php - 更改 WooCommerce 折扣销售价格的显示方式
- java - 多项选择 A , B, C , D ,E 并一起显示输出
- gwt - 遵循 Vue GWT 的设置说明后,IntelliJ IDEA 不会处理例如 @Component 注释
- regex - 匹配分隔字符之间的字符串
- javascript - 微软语音识别+nodejs
- javascript - MongoDB网站中的Css变换效果
- sqlite - 在查询中列出一周中的所有天
- ios - iOS 13:Swift - “以编程方式设置应用程序根视图控制器”不起作用
- android - 如何在不是 Activity 的简单类中设置位置