【发布时间】:2020-08-10 16:33:45
【问题描述】:
我正在尝试在我的 React 应用程序中验证表单 onSubmit。我想添加一些功能,例如,当其中一个条件返回 false 时,例如红色轮廓将添加到该输入中,并且该输入内部将是带有该错误的占位符。
这是在主文件中呈现的组件之一。通过单击设置警报按钮调用此组件。这并不重要,但重要的是,我将 getInfo() 函数从主组件发送到该组件作为道具。我需要在验证返回 true 时调用此函数
表单由 3 个输入字段和一个按钮组成,但我不需要检查第一个。
由于我的应用是闹钟,当你点击设置闹钟按钮时会弹出这个表单,我需要检查是否
第一个输入不是空的,如果它的值不超过 24(在这个输入中你设置闹钟的小时数) 第二个输入不为空,如果它的值不超过 60(在这个输入中你设置了分钟的警报) 我的想法是为这些值创建状态并创建应该更新状态的函数。函数被调用 onChange 那个特定的输入。
const [validate,setValidate] = useState({
message:'',
hours:'',
minutes:''
})
function updateHours(e){
let value = e.target.value
setValidate(prevState => ({
...prevState,
hours:value
}))
}
function updateMinutes(e){
let value = e.target.value;
setValidate(prevState => ({
...prevState,
minutes:value
}))
}
到目前为止,一切正常。然后我尝试创建将验证这些值并返回结果的新函数。这个函数会在提交时调用,如果返回true,则表示一切正常,将发送表单。
let getInfo = props.getInfo;
function validateForm(){
if(validate.hours > 24){
alert('enter correct hours !')
return false;
}
if(validate.minutes > 60){
alert('enter correct minutes !')
return false;
}
return getInfo;
}
我已经尝试在 Google 上搜索如何在提交时执行此操作,但我只能找到这种方法,但它不起作用。它的行为就像没有调用任何函数。
<form onSubmit="return validateForm">
<FontAwesomeIcon
icon={faTimesCircle}
className="closeIcon"
onClick={() => setAlarm(false)} />
<h3>Please set your alarm</h3>
<label htmlFor="text">Message</label>
<input type="text" id="text" autoComplete="off" autoFocus="on" />
<div className="flex">
<div className="inputNumber">
<label htmlFor="hours">Hour</label>
<input type="number" id="hours" name="hours" onChange={updateHours} />
</div>
<div className="inputNumber">
<label htmlFor="minutes">Minute</label>
<input type="number" id="minutes" name="minutes" onChange={updateMinutes} />
</div>
</div>
<button onClick={()=>setAlarm(false)}>SET ALARM</button>
有没有人遇到过这种问题,或者你能给我建议如何处理它?此外,我对一些更好的方法持开放态度。谢谢你。
【问题讨论】:
标签: javascript html reactjs forms validation