带有复选框的双向绑定总是返回“on”
Two-way binding with checkboxes always returns "on"
我尝试在React.js框架中重现一个简单的双向绑定示例,遵循官方教程:"双向绑定助手"。
我创建了一个MyCheckbox组件,看起来像这样:
var MyCheckbox = React.createClass({
mixins: [React.addons.LinkedStateMixin],
getInitialState: function () {
return {
fieldname: '',
value: this.props.value
};
},
render: function () {
var valueLink = this.linkState('value');
var me = this;
var handleChange = function (e) {
valueLink.requestChange(e.target.value === 'on');
};
return React.DOM.input({
type: 'checkbox',
checked: valueLink.value,
onChange: handleChange,
});
}
});
"MyCheckbox"的渲染方式如下:
React.renderComponent(MyCheckbox({
value: false
}), document.body);
第一次渲染时,一切工作如预期,如果值为true
,复选框将被选中,如果值为false
,则不选中。
如果你初始化复选框为未选中,然后选中它,一切都可以正常工作。
问题在于,当点击复选框取消勾选时,
e.target.value
总是'on'。我还想问数据绑定的ReactLink Without LinkedStateMixin和ReactLink Without valueLink方法之间有什么区别?
有什么想法吗?
我用的是最新的React.js版本(v0.10.0
)
复选框上的"value"属性是固定的,在过去,只有当复选框被选中时,它是与表单一起提交的值。
快速修复方法是:
valueLink.requestChange(e.target.checked);
valueLink仅在输入值发生变化时才起作用。事实证明,要链接到checked属性,需要使用checkedLink:
render: function () {
return React.DOM.div(null, [
React.DOM.input({
type: 'checkbox',
checkedLink: this.linkState('value'),
}),
React.DOM.span(null, "state: " + this.state.value)
]);
}
似乎很遗憾valueLink不能同时用于两者!
一个简单的解决方案是使用state:
constructor(props) { // list of objects
super(props);
this.state = {
is_checked: false
};
}
toggleCheckbox(event) {
let newValue = (this.state.is_checked === "on" || this.state.is_checked === true) ? false : true;
this.setState({
is_checked: newValue
});
}
render() {
return (
<div>
<input type="checkbox" checked={this.state.is_checked}
onChange={this.toggleCheckbox.bind(this)}
/>
</div>
);
}
相关文章:
- 使用 jQuery 的 .on 函数如何获取事件的原始元素
- 为什么我的on change事件在ie9上返回空
- 当使用“”时,事件数据在jquery中返回空对象;on()”;
- jQuery on change don't返回属性值
- 尝试从工厂中的 ref.on() 返回值到控制器
- 如何在调用时从 spy.on(obj, 'funcName') 返回假数据
- jQuery RadioButtonList 选中的值返回 “on”
- jQuery on'单击'在动态生成的列表上返回'一个空字符串'
- Force.drag().on返回未定义的值
- html中的select on change事件不会返回所需的值
- 在dropbox on change事件时运行php函数,并从php函数返回一个表
- parseFloat on $(this).val() 返回一个对象
- 复选框值返回on
- 无法读取属性'innerHTML'使用.on()返回null
- 从on()函数返回变量- jquery
- 如何使用on.()绑定jquery ajax返回的html
- 带有复选框的双向绑定总是返回“on”
- 如何使用jQuery返回“表单”的值从选择在Ruby on Rails应用程序
- on()单击将事件绑定到AJAX返回的元素
- 单选按钮返回"on"值在PhoneGap构建应用程序