简体   繁体   English

在 event.preventDefault 之后提交表单(event.preventDefault 行为)

[英]Submit a form after event.preventDefault (event.preventDefault behavior)

I made a register page and want it does some validation before submission.我制作了一个注册页面,并希望它在提交之前进行一些验证。 So, I put event.preventDefault in my handleSubmit function.所以,我把event.preventDefault放在我的 handleSubmit function 中。 event.preventDefault is to prevent the default function, so if the form is blank, then it wont submit. event.preventDefault是为了防止默认的function,所以如果表单为空,则不会提交。 But, after I fill all blanks, it can submit.但是,我填完所有空白后,它可以提交。 My question is event.preventDefault still in the handleSubmit function after blanks filled, why can the form be submitted?我的问题是event.preventDefault仍然在 handleSubmit function 填空后,为什么可以提交表单? Or, if user fills all blanks, the event.preventDefault will be disabled?或者,如果用户填写所有空白, event.preventDefault将被禁用?

Thanks!谢谢!

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() is to prevent the form from making an http call. e.preventDefault()是为了防止表单进行 http 调用。 If you don't use that in a form submission, the page will refresh every time you submit a form.如果您不在表单提交中使用它,则每次提交表单时页面都会刷新。

It really has nothing to do with blocking submission when the values are empty or anything.当值为空或其他任何内容时,它实际上与阻止提交无关。 You have to program validation logic yourself.您必须自己编写验证逻辑。

Your registerAccount function will fire every time you hit submit.每次点击提交时,您的registerAccount function 都会触发。 e.preventDefault() won't block it. e.preventDefault()不会阻止它。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM