Не могу решить сам вот такую задачу - есть поле с валидацией и чекбокс и есть handleChange для бокса и validationState() для поля, если поле валидное и чек бокс нажали, то кнопка отправить становится активной.
handleChange(event) {
this.setState(this.validationState());
var checked = event.target.checked;
var style = this.validationState();
if(checked && (JSON.stringify(style)!=='{"style":"error"}')) {
this.setState({
disabled: false
});
} else {
this.setState({
disabled: true
});
}
},
validationState() {
var mail = this.refs.mail.getValue();
var style = "error";
var re = /^(([^<>()[\]\.,;:\s@\"]+(\.[^<>()[\]\.,;:\s@\"]+)*)|(\".+\"))@(([^<>()[\]\.,;:\s@\"]+\.)+[^<>()[\]\.,;:\s@\"]{2,})$/i;
if(!re.test(mail)){
return{
style
}
}else {
style = null;
return{
style
}
}
},
Форма для которой это прописывается вот :
<form>
<Input type="text" label="Name" placeholder="Your Name" bsSize="large" />
<Input type="text" ref="mail" label="Email" placeholder="Your Email" bsSize="large" bsStyle={this.state.style}
onChange={this.handleChange} hasFeedback/>
<Input type="textarea" label="Massage" placeholder="Please tell me more" bsSize="large"/>
<RulesAndConditions>Rules and Conditions</RulesAndConditions>
<Input ref="MyCheckbox" onChange={this.handleChange} type="checkbox" label="Confirm" readOnly bsSize="large"/>
<ButtonGroup vertical block>
<Button type="reset" bsStyle="warning" bsSize="large">Reset</Button>
<p/>
<Button ref="submitButton" type="submit" bsStyle="success" bsSize="large" disabled={this.state.disabled}
>Submit</Button>
<p/>
<Button onClick={this.props.onHide} bsStyle="danger" bsSize="large">Close</Button>
</ButtonGroup>
</form>
Проблема в том, что если ввести валидное поле после того как сработал чек бокс, то кнопка не становится активной, так как слушается событие только на чек боксе. Как решить такую задачу?
Проетк на GitHub
https://github.com/Antibioticvz/react-transform-bo... (/src/index.js)
PS Не придумал ничего лучше чем
var style = this.validationState();
if(checked && (JSON.stringify(style)!=='{"style":"error"}')) {
как еще можно проверить соответствие стилей для валидации?