反应无线电输入不检查
React radio input not checking
>我有一个简单的表单,其中有几个未检查的单选按钮。每个按钮都附加了一个更改事件,但仍然没有任何更改。我该怎么做才能不仅捕获他们的数据,而且表示输入已选中?
表格
FormComponent = React.createClass({
propTypes: {
label: React.PropTypes.string,
onChange: React.PropTypes.func
},
handleEvent(e) {
let {onChange} = this.props;
console.log(e);
},
render() {
const {label} = this.props;
return (
<form className="lm-widget__form lm-flex-row">
<fieldset className="lm-flex-row__column lm-h-flex-50">
<RadioSet group='radio-group'
label={label}
radios={[
{
value: 'new',
checked: true,
changeEvent: this.handleEvent,
text: 'radio one'
},
{
value: 'old',
checked: false,
changeEvent: this.handleEvent,
text: 'radio two'
}
]}
/>
</fieldset>
</form>
)
}
});
单选按钮
RadioSet = React.createClass({
propTypes: {
group: React.PropTypes.string.isRequired,
label: React.PropTypes.string,
radios: React.PropTypes.arrayOf(
React.PropTypes.shape({
value: React.PropTypes.string.isRequired,
checked: React.PropTypes.bool.isRequired,
changeEvent: React.PropTypes.func.isRequired,
text: React.PropTypes.string.isRequired
})
).isRequired
},
render: function () {
const {group, label, radios} = this.props;
const self = this;
if (label) {
return(
<div className="lm-widget-form__label">
<div className="small">{label}</div>
<div className="segment-controls">
{radios.map(function(radio, i){
return (
<div key={i} className="segment-controls__group-item">
<input type="radio"
name={self.props.group}
className="segment-controls__button"
id={`radio-${i}`}
value={radio.value}
checked={radio.checked}
onChange={radio.changeEvent}
/>
<label htmlFor={`radio-${i}`}
className="segment-controls__label">
<span className="segment-controls__label-text">
{radio.text}
</span>
</label>
</div>
);
})
}
</div>
</div>
)
}
else {
return (
<div className="segment-controls">
{this.props.radios.map(function(radio, i){
return (
<div key={radio.value} className="segment-controls__group-item">
<input type="radio"
name={self.props.group}
className="segment-controls__button"
id={`radio-${i}`}
value={radio.value}
checked={radio.checked}
onChange={radio.changeEvent}
/>
<label htmlFor={`radio-${i}`}
className="segment-controls__label">
<span className="segment-controls__label-text">
{radio.text}
</span>
</label>
</div>
);
})
}
</div>
);
}
}
});
所以问题是你告诉第一个单选按钮,每次都通过传递true
来检查它。
如果我们更改您的第一段代码以使用setState
这应该可以工作。
FormComponent = React.createClass({
getInitialState() {
return {
checkedIndex: 0
};
},
propTypes: {
label: React.PropTypes.string,
onChange: React.PropTypes.func
},
handleEvent(index, e) {
this.setState({
checkedIndex: index
});
let {onChange} = this.props;
console.log(e);
},
render() {
const {label} = this.props;
const radios = [
{
value: 'new',
checked: false,
changeEvent: this.handleEvent.bind(this, 0),
text: 'radio one'
},
{
value: 'old',
checked: false,
changeEvent: this.handleEvent.bind(this, 1),
text: 'radio two'
}
];
radios[this.state.checkedIndex].checked = true;
return (
<form className="lm-widget__form lm-flex-row">
<fieldset className="lm-flex-row__column lm-h-flex-50">
<RadioSet group='radio-group'
label={label}
radios={radios}
/>
</fieldset>
</form>
)
}
});
另请注意,我们使用bind
来维护handleEvent
的this
上下文并传入正确的索引。
相关文章:
- 在单击任何位置时隐藏元素,而不检查每次DOM单击
- 使用onkeyup JS事件检查输入的值是否唯一
- 如何在不检查HTTP标头的情况下检测移动浏览器
- .val()不返回输入文本
- Jquery UI日期选择器不关注输入
- 如何使用JQuery检查输入(电子邮件)字段是否包含特殊字符
- Firefox-当不在输入控件上时隐藏焦点高亮显示
- 检查输入是否未更改
- 不允许输入或聚焦的输入类型文本
- 表单验证工作不正常,在不检查条目的情况下继续
- 获取检查输入无线电的标签
- 如何在不更改输入内容的情况下更改输入值
- jQuery - 检查输入字段是否保持不变
- 检查输入字段的值,而不考虑类型
- 反应无线电输入不检查
- N00B 帮助 - 用于检查输入是否可以形成直角三角形的脚本.搞砸了我的警报,不知道我是否有变量
- JQuery检查输入是否为空而不检查加载
- 检查/取消检查输入不工作
- jQuery:修剪不检查空输入
- Jquery/Form -检查输入字段长度至少为5个字符-并且也不匹配某些单词