Im new to reactJS. Im wondering why my code below doesnt work. Everything works except disabling my NEXT button when text fields are empty. My expectation is that after i fill out ALL the textboxes, the NEXT button will be enabled.
class Registration extends React.Component { constructor (props) { super (props); this.state = { selectedGender: null, errors: [], initComplete: false } this._handleSubmit = this._handleSubmit.bind(this); this._handleInputMobileOnChange = this._handleInputMobileOnChange.bind(this); this.clearError = this.clearError.bind(this); } clearError () { this.setState({ errors: [] }); } _handleInputMobileOnChange (e) { e.preventDefault(); this.clearError(); e.target.value = utils.removeNonNumbers(e.target.value); //this.setState({value: e.target.value}) } change(e){ if("" != e.target.value){ this.button.disabled = false; } else{ this.button.disabled = true; } } render() { return ( <div className="container-fluid"> <form onSubmit={this._handleSubmit}> <div className="form-group has-danger"> <label htmlFor="input-MobileNum">number *</label> <input ref={(ref) => this.inputMobile = ref} type="tel" className={'form-control ' } id="input-MobileNum" onChange={()=>{ this._handleInputMobileOnChange; this.change.bind(this)}} defaultValue=""/> </div> <div className="form-group has-danger"> <label htmlFor="input-Email">Email address *</label> <input ref={(ref) => this.inputEmail = ref} type="email" className={'form-control '} id="input-Email" defaultValue="" onChange={()=>{ this.clearError; this.change.bind(this)}}/> </div> <div className="form-group has-danger"> <label htmlFor="input-Invitation">Invitation code</label> <input ref={(ref) => this.inputInvitation = ref} type="text" className={'form-control '} id="input-Invitation" defaultValue="" onChange={()=>{ this.clearError; this.change.bind(this)}}/> </div> <div className="form-group cta"> //NEXT BUTTON <button type="submit" className="btn btn-primary" ref={(button) => this.button=button}>Next</button> </div> </form> </div> ) } THANKS!!!
I updated my code to this. And i tested it case by case. Only mobile works, the email and invitation code dont work for some reason.
class Registration extends React.Component { constructor (props) { super (props); this.state = { selectedGender: null, errors: [], initComplete: false } this._handleSubmit = this._handleSubmit.bind(this); this._handleInputMobileOnChange = this._handleInputMobileOnChange.bind(this); this._handleInputEmailOnChange = this._handleInputEmailOnChange.bind(this); this._handleInputInvitationOnChange = this._handleInputInvitationOnChange.bind(this); this.clearError = this.clearError.bind(this); } clearError () { this.setState({ errors: [] }); } disable(){ let disable = true; if (this.state.inputMobile || this.state.inputEmail || this.state.inputInvitation) { //I tried && operator, still only mobile works disable = false; } return disable; } _handleInputMobileOnChange (e) { e.preventDefault(); this.clearError(); e.target.value = utils.removeNonNumbers(e.target.value); this.setState({inputMobile: e.target.value}) } _handleInputEmailOnChange(e){ e.preventDefault(); this.clearError(); e.target.value = utils.removeNonNumbers(e.target.value); this.setState({inputEmail: e.target.value}) } _handleInputInvitationOnChange(e){ e.preventDefault(); this.clearError(); e.target.value = utils.removeNonNumbers(e.target.value); this.setState({inputInvitation: e.target.value}) } change(e){ if("" != e.target.value){ this.button.disabled = false; } else{ this.button.disabled = true; } } render() { return ( <div className="container-fluid"> <form onSubmit={this._handleSubmit}> <div className="form-group has-danger"> <label htmlFor="input-MobileNum">number *</label> <input ref={(ref) => this.inputMobile = ref} type="tel" className={'form-control ' } id="input-MobileNum" onChange={this._handleInputMobileOnChange}} defaultValue=""/> </div> <div className="form-group has-danger"> <label htmlFor="input-Email">Email address *</label> <input ref={(ref) => this.inputEmail = ref} type="email" className={'form-control '} id="input-Email" defaultValue="" onChange={this._handleInputEmailOnChange}/> </div> <div className="form-group has-danger"> <label htmlFor="input-Invitation">Invitation code</label> <input ref={(ref) => this.inputInvitation = ref} type="text" className={'form-control '} id="input-Invitation" defaultValue="" onChange={this._handleInputInvitationOnChange}/> </div> <div className="form-group cta"> //NEXT BUTTON <button type="submit" className="btn btn-primary" disabled={this.disable()}>Next</button> </div> </form> </div> ) } Nvm. I was being stupid. The code above works! :)))