如何根据React上的输入表单来禁用/启用按钮?

RMartins11

我创建了一个表单输入,因此人们可以给我发送电子邮件。我希望我的按钮仅在没有来自不同输入的错误消息时才处于活动状态。到目前为止,该按钮在页面首次呈现时已被禁用,但是在我用验证(电子邮件)填充了第一个输入之后,该按钮变为启用状态。我希望在所有输入正确填充后才启用它。另外,如果我填写了所有输入,但是又清理了一个,则希望该按钮被禁用。

你能帮助我吗?

请参见下面的代码:

const validateForm = (errors) => {
  let valid = true;
  Object.values(errors).forEach(
    (val) => val.length > 0 && (valid = false)
  );
  return valid;
}

class Form2 extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      isDisabled: true,
      firstName: null,
      email: null,
      subject: null,
      message: null,
      errors: {
        firstName: "",
        email: "",
        subject: "",
        message: "",

      }
    };
  }

  handleSubmit = (e) => {
    e.preventDefault();
    emailjs.sendForm('gmail', 'template_test', e.target, "***************")
    if(validateForm(this.state.errors)) {
      console.info("Valid Form")
    }else{
      console.error("Invalid Form")
    }
    e.target.reset();
  }

  handleChange = (event) => {
    event.preventDefault();
    const { name, value } = event.target;
    let errors = this.state.errors;

    switch (name) {
      case "firstName": 
        errors.firstName = 
          value.length < 3
            ? "Enter your name"
            : "";
        break;
      case "email": 
        errors.email = 
          validEmailRegex.test(value)
            ? ""
            : "Enter a valid email address";
        break;
      case "subject": 
        errors.subject = 
          value.length < 3
            ? "Enter a subject at least 3 characters long"
            : "";
        break;
      case "message" :
        errors.message =
        value.length < 10
            ? "Enter your message. It must be at least 10 characters long"
            : "";
      default:
        break;
    }

    this.setState({errors, [name]: value});

    if(errors.email.length < 1 && errors.subject.length < 1 && errors.message.length < 1){
      this.setState({isDisabled: false})
    } else if(errors.email.length > 0 && errors.subject.length > 0 && errors.message.length > 0){
      this.setState({isDisabled: true})
    }
  }

  
  render(){
    const {errors} = this.state;
  return (
    <div>
     <div className="container fluid">
       <form onSubmit={this.handleSubmit}>
        <div className="row pt-5 mx-auto">
          <div className="col-8 form-group mx-auto">
            <input type="text" className="form-control" placeholder="Name" name="name"/>
            {errors.firstName.length > 0 && 
                <span className='error'>{errors.firstName}</span>}
          </div>
          <div className="col-8 form-group pt-2 mx-auto">
            <input type="email" className="form-control" placeholder="Email Address" name="email" onChange={this.handleChange} noValidate/>
            {errors.email.length > 0 && 
                <span className='error'>{errors.email}</span>}
          </div>
          <div className="col-8 form-group pt-2 mx-auto">
            <input type="text" className="form-control" placeholder="Subject" name="subject" onChange={this.handleChange} noValidate/>
            {errors.subject.length > 0 &&
              <span className="error">{errors.subject}</span>}
          </div>
          <div className="col-8 form-group pt-2 mx-auto">
            <textarea className="form-control" id="" cols="30" rows="8" placeholder="Your message" name="message" onChange={this.handleChange} noValidate></textarea>
              {errors.message.length > 0 &&
              <span className="error">{errors.message}</span>}
          </div>
          <div className="col-8 pt-3 mx-auto">
            <button className="btn btn-dark" disabled={this.state.isDisabled}>Submit</button>
          </div>
        </div>
       </form>
     </div>
   </div>
)
}
}

export default Form2;
密码猴子

根据触发onChange函数的方式,我实际上将为错误消息分配默认值。

      errors: {
        firstName: " ",
        email: " ",
        subject: " ",
        message: " "
      }

否则,只要正确填写至少一个字段,您的switch语句就会启用该表单。

一旦这样做,您的if块逻辑就会变得简单得多:

    if (
      errors.email.length === 0 &&
      errors.subject.length === 0 &&
      errors.message.length === 0 &&
      errors.firstName.length === 0
    ) {
      this.setState({ isDisabled: false });
    } else {
      this.setState({ isDisabled: true });
    }

另外onChange,您的姓名字段似乎没有附件,因此我也进行了修复。无论如何,这是一个有效的版本:https : //codesandbox.io/s/upbeat-ritchie-sz7zl?file=/src/App.js

还要注意,不要在所有默认错误消息中都加空格,因为这似乎有点不合常规,您可以像下面这样简单地用实际消息填充它们

errors: {
        firstName: "Enter your name",
        email: "Enter a valid email",
        subject: "Enter a subject at least 3 characters long",
        message: "Enter your message. It must be at least 10 characters long"
      }

但这取决于您是否可以在页面加载时显示这些内容。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在Django上动态禁用/启用表单的输入字段

来自分类Dev

根据输入的验证启用/禁用按钮

来自分类Dev

如何启用/禁用按钮来验证有 ng-repeat 的表单?

来自分类Dev

如何根据文本框是否为空来禁用或启用按钮?

来自分类Dev

在WPF中,如何根据不同的TextBox Text属性的输入启用/禁用按钮?

来自分类Dev

如何根据单选按钮切换启用/禁用输入字段

来自分类Dev

vb.net-根据用户输入启用/禁用按钮

来自分类Dev

如何在登录表单上启用提交按钮和[输入]键提交操作?

来自分类Dev

如何在登录表单上启用提交按钮和[输入]键提交操作?

来自分类Dev

如何根据使用php的选择启用/禁用表单字段

来自分类Dev

如何检查表单关闭按钮的状态(启用/禁用)

来自分类Dev

禁用表单上的输入

来自分类Dev

如何根据特定条件禁用和启用javascript按钮?

来自分类Dev

如何根据summernote里面的文字启用或禁用按钮?

来自分类Dev

如何根据 Datepicker 选择的日期禁用/启用提交按钮?

来自分类Dev

根据值表单选择禁用和启用表单文本输入。

来自分类Dev

如何使按钮1 onClick在React中启用禁用的按钮2?

来自分类Dev

如何在启用鼠标按钮的同时禁用鼠标移动输入?

来自分类Dev

根据输入值启用按钮

来自分类Dev

禁用按键上的启用按钮

来自分类Dev

如何在WPF中覆盖按钮上的启用/禁用外观

来自分类Dev

禁用/启用表单中的按钮提交

来自分类Dev

单击单选按钮时禁用或启用文本输入表单,使用 Jquery

来自分类Dev

根据Blazor服务器端输入的文本启用/禁用按钮

来自分类Dev

根据输入字段启用/禁用提交按钮(已填充/未填充)

来自分类Dev

根据Http响应启用/禁用按钮

来自分类Dev

根据搜索条件启用/禁用清除按钮

来自分类Dev

根据复选框启用/禁用按钮

来自分类Dev

根据组禁用或启用单选按钮

Related 相关文章

  1. 1

    如何在Django上动态禁用/启用表单的输入字段

  2. 2

    根据输入的验证启用/禁用按钮

  3. 3

    如何启用/禁用按钮来验证有 ng-repeat 的表单?

  4. 4

    如何根据文本框是否为空来禁用或启用按钮?

  5. 5

    在WPF中,如何根据不同的TextBox Text属性的输入启用/禁用按钮?

  6. 6

    如何根据单选按钮切换启用/禁用输入字段

  7. 7

    vb.net-根据用户输入启用/禁用按钮

  8. 8

    如何在登录表单上启用提交按钮和[输入]键提交操作?

  9. 9

    如何在登录表单上启用提交按钮和[输入]键提交操作?

  10. 10

    如何根据使用php的选择启用/禁用表单字段

  11. 11

    如何检查表单关闭按钮的状态(启用/禁用)

  12. 12

    禁用表单上的输入

  13. 13

    如何根据特定条件禁用和启用javascript按钮?

  14. 14

    如何根据summernote里面的文字启用或禁用按钮?

  15. 15

    如何根据 Datepicker 选择的日期禁用/启用提交按钮?

  16. 16

    根据值表单选择禁用和启用表单文本输入。

  17. 17

    如何使按钮1 onClick在React中启用禁用的按钮2?

  18. 18

    如何在启用鼠标按钮的同时禁用鼠标移动输入?

  19. 19

    根据输入值启用按钮

  20. 20

    禁用按键上的启用按钮

  21. 21

    如何在WPF中覆盖按钮上的启用/禁用外观

  22. 22

    禁用/启用表单中的按钮提交

  23. 23

    单击单选按钮时禁用或启用文本输入表单,使用 Jquery

  24. 24

    根据Blazor服务器端输入的文本启用/禁用按钮

  25. 25

    根据输入字段启用/禁用提交按钮(已填充/未填充)

  26. 26

    根据Http响应启用/禁用按钮

  27. 27

    根据搜索条件启用/禁用清除按钮

  28. 28

    根据复选框启用/禁用按钮

  29. 29

    根据组禁用或启用单选按钮

热门标签

归档