javascript - React Form onSubmit 方法未触发

标签 javascript reactjs forms next.js

这是登录表单代码。问题是当按下“提交”按钮时,提交处理程序不会被触发。造成这种情况的合理原因是什么?

loginHandler 函数永远不会被触发,但是,handleInputChange 函数似乎工作正常。

我尝试过在在线编辑器中复制粘贴相同的代码,它似乎可以很好地触发功能?我找不到任何语法错误,但是还有其他什么因素可以阻止它被触发吗?

import apiClient, { spaAuth, loginEndPoint } from "../../util/api";
import { responseManager } from "../../util/auth";
import Link from "next/link";
import { useEffect, useState } from "react";

const LoginForm = () => {
  const loginCred = {
    user_name: "",
    password: "",
    remember: false,
  };
  const [formData, setFormData] = useState(loginCred);
  const [remember, setRemember] = useState(false);

  const handleInputChange = (e) => {
    setFormData({
      ...formData,
      [e.currentTarget.name]: e.currentTarget.value,
    });
  };

  const rememberHandler = (e) => {
    e.currentTarget.value = e.currentTarget.checked;
  };

  /**
   *
   * @param {*} e
   * Form Submission Handler
   */
  const loginHandler = (e) => {
    e.preventDefault();
    console.log("Here");

    apiClient
      .get(spaAuth)
      .then((response) => {
        console.log(response);
        console.log(formData);

        apiClient
          .post(loginEndPoint, formData)
          .then((response) => {
            console.log(response);

            responseManager("login", response, formData);
          })
          .catch((error) => {
            console.log(error);
          });
      })
      .catch((error) => {
        console.log(error);
      });
  };

  return (
    <form
      className="flex flex-col justify-center w-full items-center mt-8 flex-wrap"
      id="LoginForm"
      onSubmit={loginHandler}
    >
      <div className="w-full flex flex-col justify-center items-center mb-10">
        <input
          className="input h-10 pl-5"
          id="username"
          type="text"
          name="user_name"
          placeholder="Username"
          onChange={handleInputChange}
          required={true}
        />

        <input
          className="input h-10 pl-5"
          id="password"
          type="password"
          name="password"
          placeholder="Password"
          onChange={handleInputChange}
          required={true}
        />

        <div className="w-5/6 flex items-center justify-between">
          <div>
            <label className="flex items-center text-gray-400 font-bold">
              <input
                className="leading-tight"
                type="checkbox"
                value={remember}
                id="remember"
                onChange={handleInputChange}
                onClick={rememberHandler}
                name="remember"
              />
              <span className="text-sm pl-2">Remember Me</span>
            </label>
          </div>
          <div>
            <Link href="/">
              <a className="font-bold text-sm text-gray-400 transition-colors duration-500 hover:text-blue-300">
                Forgot Password
              </a>
            </Link>
          </div>
        </div>
      </div>

      <input
        type="submit"
        className="btn bg-btn-color w-56 h-14 shadow-btn text-2xl mb-5 font-title font-bold"
        value="Login"
      />
    </form>
  );
};

export default LoginForm;

最佳答案

我已经解决了这个问题,在这种情况下-

<input
    type="submit"
    className="btn bg-btn-color w-56 h-14 shadow-btn text-2xl mb-5 font-title font-bold"
    value="Login"
    onClick={(e) => {
        e.stopPropagation();
    }}
/>

添加 onClick 方法并阻止其传播可启用 onSubmit 方法触发。

使用按钮而不是输入元素可以完成同样的事情。

关于javascript - React Form onSubmit 方法未触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71980582/

相关文章:

html - Servlet返回“HTTP状态404请求的资源(/Servlet)不可用”

javascript - 在 JavaScript 中隐藏/欺骗引荐来源网址的最可靠方法是什么?

javascript - Apollo useQuery() 抛出错误 : ECONNREFUSED when running async test in React Testing Library

javascript - 未找到 React Router v5 嵌套路由

php - php yii将错误发送到actionCreate上的表单

javascript - JS 或 jQuery 更改表单对象的值时出现问题

javascript - 创建钩子(Hook)后

JavaScript/ react : How to detect `await` call and setState accordingly?

javascript - 使用 KenoUI 上传文件 : provide URL via data- attribute

javascript - React 测试库如何使用 waitFor