小编典典

如何禁用表单提交按钮,直到所有输入字段均已填写?ReactJS ES2015

reactjs

嗨,我找到了单字段表单的答案…但是,如果我们有多个字段的表单怎么办?

如果您有1个字段,则禁用它是很好的选择,但是当您要基于多个字段禁用它时,它将不起作用:

getInitialState() {
    return {email: ''}
  },
  handleChange(e) {
    this.setState({email: e.target.value})
  },
  render() {
    return <div>
      <input name="email" value={this.state.email} onChange={this.handleChange}/>
      <button type="button" disabled={!this.state.email}>Button</button>
    </div>
  }
})

阅读 394

收藏
2020-07-22

共1个答案

小编典典

这是表单验证的基本设置:

getInitialState() {
    return {
      email: '',
      text: '',
      emailValid: false,         // valid flags for each field
      textValid: false, 
      submitDisabled: true       // separate flag for submit
    }
  },
  handleChangeEmail(e) {         // separate handler for each field
    let emailValid = e.target.value ? true : false;        // basic email validation
    let submitValid = this.state.textValid && emailvalid   // validate total form
    this.setState({
      email: e.target.value
      emailValid: emailValid, 
      submitDisabled: !submitValid
    })
  },
  handleChangeText(e) {         // separate handler for each field
    let textValid = e.target.value ? true : false;        // basic text validation
    let submitValid = this.state.emailValid && textvalid   // validate total form
    this.setState({
      text: '',
      textValid: textValid, 
      submitDisabled: !submitValid
    })
  },
  render() {
    return <div>
      <input name="email" value={this.state.email} onChange={this.handleChangeEmail}/>
      <input name="text" value={this.state.text} onChange={this.handleChangeText}/>
      <button type="button" disabled={this.state.submitDisabled}>Button</button>
    </div>
  }
})

在更精细的设置中,您可能需要将每个输入字段放在一个单独的组件中。并使代码更干燥(请注意更改处理程序中的重复项)。
这里一样,这里也有各种各样的反应形式的解决方案。

2020-07-22