javascript - 处理 React 数字输入中的点击和按键不起作用
问题描述
我在下面有一些 React 代码的一部分,我有一个数字输入,我想防止人们能够点击 0 以下,我已经使用 min 属性完成了。但是我已经看到仍然可以手动键入负数。经过一番谷歌搜索后,我发现人们可以通过按键检查并查看字符代码来处理这个问题,但由于某种原因,我无法完全让它工作。
两个处理程序是否相互冲突?我的目标是允许点击增量适用于正数,并防止输入中允许负数和小数。
这是一个受控输入,其中值来自状态。
const handleChange = (e) => {
console.log(e.target.value);
setCount(e.target.value);
};
const handleKeyPress = (e) => {
console.log(e.target.value);
console.log(e.charCode);
if (e.charCode >= 48 && e.charCode <= 57) {
setCount(e.target.value);
}
};
return (
<section>
<h3>Input test</h3>
<form onSubmit={handleSubmit}>
<label htmlFor="amount">paragraphs:</label>
<input
type="number"
name="amount"
id="amount"
min="0"
value={count}
onKeyPress={handleKeyPress}
onChange={handleChange}
/>
解决方案
您可以在 handleChange 函数中将值格式化为绝对整数,它会在重新渲染时删除零和小数分隔符:
const handleChange = (e) => {
setCount(Math.abs(parseInt(e.target.value)));
};
或者,如果您绝对想阻止“0”和“。” 要输入的字符,您可以在 handleKeyPress 函数中使用 preventDefault :
const handleKeyPress = (e) => {
if (e.charCode === 45 || e.charCode === 46) {
return e.preventDefault()
}
};
推荐阅读
- machine-learning - Google 的 Files Go 如何就我手机上的数据提供建议
- gis - GeoPandas:创建多面地理第一部分的质心列表?
- python - 在 Django 中对 REST 端点进行单元测试
- object - 在 React/Redux 中使用 Thunk 从 API 访问 JSON 数据的问题
- c++ - C ++如何将char数组的每三个字母变成大写字母?
- list - prolog,用户选择咖啡菜单
- performance - $emit 和 Watchers 的 VueJS 性能成本
- yii2 - Yii2 UploadedFile::saveAs() 没有保存文件
- android - 所以 geocoder.getFromLocationName 返回 NULL / USE JSONObject
- php - 无法在 php 标签中获取信息以显示