在 event.preventDefault 之后提交表单(event.preventDefault 行为)
Submit a form after event.preventDefault (event.preventDefault behavior)
我制作了一个注册页面,希望它在提交前进行一些验证。因此,我将 event.preventDefault
放入我的 handleSubmit 函数中。 event.preventDefault
是为了防止默认函数,所以如果表单是空白的,那么它不会提交。但是,在我填写所有空白后,它可以提交。我的问题是event.preventDefault
填空后还在handleSubmit函数中,为什么可以提交表单?或者,如果用户填写所有空白,event.preventDefault
将被禁用?
谢谢!
export default function RegisterPage() {
const [values, setValues] = useState({
userName: "",
nickName: "",
password: "",
});
const [errors, setErrors] = useState({});
const [apiResError, setApiResError] = useState("");
const handleSubmit = (e) => {
setApiResError("");
e.preventDefault();
registerAccount(values.userName, values.nickName, values.password).then(
(res) => {
console.log(res);
}
);
};
const handleChange = (e) => {
const { name, value } = e.target;
setValues({
...values,
[name]: value,
});
};
const handleFocus = (e) => {
const { name } = e.target;
setErrors({ ...errors, [name]: "" });
};
return (
<RegisterPageContainer>
<RegisterPageTitle>Register</RegisterPageTitle>
{apiResError && <div>{apiResError}</div>}
<RegisterForm onSubmit={handleSubmit}>
<InputWrapper>
<UserNameInput
name="userName"
type="text"
placeholder="Username"
onChange={handleChange}
value={values.userName}
onFocus={handleFocus}
/>
</InputWrapper>
{errors.userName && <div>{errors.userName}</div>}
<InputWrapper>
<NickNameInput
name="nickName"
type="text"
placeholder="Nickname"
onChange={handleChange}
value={values.nickName}
onFocus={handleFocus}
/>
</InputWrapper>
{errors.nickName && <div>{errors.nickName}</div>}
<InputWrapper>
<PasswordInput
name="password"
type="password"
placeholder="Enter your password"
onChange={handleChange}
value={values.password}
onFocus={handleFocus}
/>
</InputWrapper>
{errors.password && <div>{errors.password}</div>}
<SubmitBtn>Create An Account</SubmitBtn>
</RegisterForm>
</RegisterPageContainer>
);
}
e.preventDefault()
是为了防止表单进行http调用。如果您不在表单提交中使用它,则每次提交表单时页面都会刷新。
当值为空或任何其他内容时,它确实与阻止提交无关。您必须自己编写验证逻辑。
您的 registerAccount
函数将在您每次点击提交时触发。 e.preventDefault()
不会阻止它。
我制作了一个注册页面,希望它在提交前进行一些验证。因此,我将 event.preventDefault
放入我的 handleSubmit 函数中。 event.preventDefault
是为了防止默认函数,所以如果表单是空白的,那么它不会提交。但是,在我填写所有空白后,它可以提交。我的问题是event.preventDefault
填空后还在handleSubmit函数中,为什么可以提交表单?或者,如果用户填写所有空白,event.preventDefault
将被禁用?
谢谢!
export default function RegisterPage() {
const [values, setValues] = useState({
userName: "",
nickName: "",
password: "",
});
const [errors, setErrors] = useState({});
const [apiResError, setApiResError] = useState("");
const handleSubmit = (e) => {
setApiResError("");
e.preventDefault();
registerAccount(values.userName, values.nickName, values.password).then(
(res) => {
console.log(res);
}
);
};
const handleChange = (e) => {
const { name, value } = e.target;
setValues({
...values,
[name]: value,
});
};
const handleFocus = (e) => {
const { name } = e.target;
setErrors({ ...errors, [name]: "" });
};
return (
<RegisterPageContainer>
<RegisterPageTitle>Register</RegisterPageTitle>
{apiResError && <div>{apiResError}</div>}
<RegisterForm onSubmit={handleSubmit}>
<InputWrapper>
<UserNameInput
name="userName"
type="text"
placeholder="Username"
onChange={handleChange}
value={values.userName}
onFocus={handleFocus}
/>
</InputWrapper>
{errors.userName && <div>{errors.userName}</div>}
<InputWrapper>
<NickNameInput
name="nickName"
type="text"
placeholder="Nickname"
onChange={handleChange}
value={values.nickName}
onFocus={handleFocus}
/>
</InputWrapper>
{errors.nickName && <div>{errors.nickName}</div>}
<InputWrapper>
<PasswordInput
name="password"
type="password"
placeholder="Enter your password"
onChange={handleChange}
value={values.password}
onFocus={handleFocus}
/>
</InputWrapper>
{errors.password && <div>{errors.password}</div>}
<SubmitBtn>Create An Account</SubmitBtn>
</RegisterForm>
</RegisterPageContainer>
);
}
e.preventDefault()
是为了防止表单进行http调用。如果您不在表单提交中使用它,则每次提交表单时页面都会刷新。
当值为空或任何其他内容时,它确实与阻止提交无关。您必须自己编写验证逻辑。
您的 registerAccount
函数将在您每次点击提交时触发。 e.preventDefault()
不会阻止它。