ReactJS中禁止用户手动输入日期字段,仅允许选择日期
嘿,这问题我熟!在React的JSX里实现禁止手动编辑日期输入其实很简单,只要把原生的onkeydown="return false"转换成React的合成事件写法就行,我给你一步步说:
首先,React里的事件名是驼峰命名的,所以要用onKeyDown而不是小写的onkeydown。然后在事件处理函数里调用e.preventDefault()就能阻止键盘输入的默认行为,和原生的return false效果完全一致。
针对你的代码,只需要给<input>标签加上这个事件处理就行,修改后的完整代码如下:
export default observer(({ field, type = 'date', readOnly = false }) => { return ( <div className="form__input-group"> <input className="form_date" id={field.id} min={new Date().toISOString().split('T')[0]} aria-describedby="name-desc" {...field.bind({ type })} readOnly={readOnly} // 新增这行,阻止所有键盘输入行为 onKeyDown={(e) => e.preventDefault()} /> </div> ); });
这里还有几个细节要注意:
- 一定要把
onKeyDown写在{...field.bind({ type })}的后面,如果你的表单绑定方法里也定义了onKeyDown事件,这样才能确保我们的阻止逻辑覆盖原有行为。 - 如果想更简洁,也可以直接写成
onKeyDown={() => false},不过调用e.preventDefault()的语义更清晰,可读性更强。 - 如果你尝试过直接用
readOnly属性,部分浏览器可能会连日期选择器一起禁用,所以用onKeyDown的方法兼容性更好,完全满足「只能通过选择器选日期」的需求。
内容的提问来源于stack exchange,提问作者Rocker rock
相关产品推荐
相关产品推荐

