我想在提交表单之前使用html字段的html'required'属性设置更多条件。有没有一种方法可以手动拦截/更改其检查的条件?就我而言,我想要求字段必须是数组中的值。
答案 0 :(得分:0)
由于您使用的是React(以及JSX),因此您可以按照以下方式进行操作:
const myComp = (props) => {
const [isRequired, setIsRequired] = useState(true);
if(your logic for when isRequired should be true here){
setIsRequired(false)
}
return (
<div>
<form required={isRequired} />
</div>
)
}
您可以在if
中检查要检查的任何数据,可以有多个if,多个检查,一系列检查,无论您想要什么。我将其默认设置为必填,但您可以根据需要进行设置。甚至对于默认的isRequired
值都有特定的逻辑。
我在这里使用required
html属性,但是您也可以拦截onSubmit
表单事件并在那里进行自己的检查,并向用户解释剩下要做的事情。
答案 1 :(得分:0)
您可以挂钩onsubmit事件
<form onsubmit="return checkYourCondition()">
<form>
function checkYourCondition(){
//return true or false depending on your condition
return true;
}
答案 2 :(得分:0)
您可以生成一个包含所有数组值的RegEx,并将input
的pattern属性设置为此RegEx。
使用此解决方案,如果所需输入无效,您将具有浏览器的默认行为。 (例如突出显示输入,通知用户...)
答案 3 :(得分:0)
这是一个漫长的过程,但非常有用。
您可以在on change
中任何input
标签上进行form
事件,
<input type="text" className="form-control" onChange={(event) => this.handleUserInput(event)} name="fname"/>
handleUserInput(e) {
const name = e.target.name;
const value = e.target.value;
this.setState({[name]: value},
() => { this.validateField(name, value) });
}
validateField(fieldName, value) {
let fnameValid = this.state.fnameValid;
switch(fieldName) {
case 'fname':
fnameValid = value!=="" && /^([a-zA-Z]+)$/.test(value) && value.length >= 2; //here you can check as many condition as you want using `&&` operator.
break;
case 'more input name here':
... // More input validation
break;
default:
break;
}
}