如何在 Safari 中将 onPaste 优先于 onKeyPress
How to prioratize onPaste over onKeyPress in Safari
我正在使用此 Javascript 代码构建一个输入字段,该字段应仅在输入数字时才接受输入。但是用户应该能够使用 command+v 或 ctrl+[=16 粘贴数字=]v。这种逻辑在 Chrome 的情况下似乎工作正常,但在 Safari 中,OnKeyPress
优先于 OnPaste
并且 handleOnKeyPress
在 V[=22 时阻止事件=] 被点击。如何允许用户粘贴数字但禁止在 safari 中输入字母 v。
const handleOnKeyPress = e => {
// Take only input between 0-9
if(!RegExp(/^([0-9]*)$/).test(e.key)) e.preventDefault()
}
const handleOnPaste = e => {
// Print the data which is being being pasted.
console.log(e.clipboardData.getData('Text'))
}
<input onKeyPress={handleOnKeyPress} onPaste={e => {handleOnPaste(e)}} />
来自 Randy Casburn 的评论。我改变了 handleOnKeyPress。小的改变现在变得更有意义了。
const handleOnKeyPress = e => {
if(!RegExp(/^([0-9]*)$/).test(e.key) && !e.metaKey) e.preventDefault()
}
我正在使用此 Javascript 代码构建一个输入字段,该字段应仅在输入数字时才接受输入。但是用户应该能够使用 command+v 或 ctrl+[=16 粘贴数字=]v。这种逻辑在 Chrome 的情况下似乎工作正常,但在 Safari 中,OnKeyPress
优先于 OnPaste
并且 handleOnKeyPress
在 V[=22 时阻止事件=] 被点击。如何允许用户粘贴数字但禁止在 safari 中输入字母 v。
const handleOnKeyPress = e => {
// Take only input between 0-9
if(!RegExp(/^([0-9]*)$/).test(e.key)) e.preventDefault()
}
const handleOnPaste = e => {
// Print the data which is being being pasted.
console.log(e.clipboardData.getData('Text'))
}
<input onKeyPress={handleOnKeyPress} onPaste={e => {handleOnPaste(e)}} />
来自 Randy Casburn 的评论。我改变了 handleOnKeyPress。小的改变现在变得更有意义了。
const handleOnKeyPress = e => {
if(!RegExp(/^([0-9]*)$/).test(e.key) && !e.metaKey) e.preventDefault()
}