ReactJS自定义三状态复选框将不显示复选标记
ReactJS custom tristate checkbox will not show checkmark
我正在尝试使用React创建一个三状态复选框。我正在用gulp-react 3.0.1编译,并在Chrome和Edge上进行了测试,运气不佳。目标是在to Do列表中使用复选框,并且我喜欢使用"进行中"状态,因此序列应该是:
- 未选中复选框(空方框)
- 点击
- 未选中单选按钮(空圆圈)
- 点击
- 复选框(带复选标记的方块)
- 重复(下一个点击回到未选中的复选框)
- 未选中复选框(空方框)
- 点击
- 未选中单选按钮(空圆圈)
- 点击
- 未选中复选框(空方块)->问题
var TriState = React.createClass({
State: { undone: 1, inprogress: 2, done: 3 },
getInitialState: function () {
return { inputType: "checkbox", checkState: false, triState: this.State.undone };
},
render: function () {
return (
<span>
<input type={this.state.inputType} checked={this.state.checkState} onChange={this.changeHandler} />
{this.props.children}
</span>
);
},
changeHandler: function (evt) {
evt.preventDefault();
switch (this.state.triState) {
case this.State.undone:
this.setState({ inputType: "radio", checkState: false, triState: this.State.inprogress });
break;
case this.State.inprogress:
this.setState({ inputType: "checkbox", checkState: true, triState: this.State.done });
break;
case this.State.done:
this.setState({ inputType: "checkbox", checkState: false, triState: this.State.undone });
break;
}
}
});
从changeHandler
中移除evt.preventDefault();
。您现在正在阻止实际选中复选框的默认行为。
var TriState = React.createClass({
Mode: { undone: 1, inprogress: 2, done: 3 },
getInitialState: function () {
return { mode: this.Mode.undone };
},
render: function () {
return (
<span>
<input ref="triState" type={this.state.mode === this.Mode.inprogress ? "radio" : "checkbox"} onChange={this.changeHandler} />
<span onMouseUp={this.clickHandler}> {this.props.children}</span>
</span>
);
},
changeHandler: function (evt) {
switch (this.state.mode) {
case this.Mode.undone:
this.setState({ mode: this.Mode.inprogress });
evt.preventDefault();
break;
case this.Mode.inprogress:
this.setState({ mode: this.Mode.done });
break;
case this.Mode.done:
this.setState({ mode: this.Mode.undone });
break;
}
},
clickHandler: function () {
React.findDOMNode(this.refs.triState).click();
}
});
相关文章:
- 如何在用户按下F5键或单击浏览器时显示自定义的fancybox's后退/关闭按钮
- 如何在html中以角度显示自定义指令的作用域
- 使用Plaid Link显示自定义用户名和密码模式对话框
- 根据屏幕分辨率显示自定义背景图像
- 登录时显示自定义错误消息
- 如何在具有多边形的同一地图上显示自定义标记
- 如何在javascript中使画布显示自定义图像作为背景
- Chrome扩展-在全屏视频顶部显示自定义通知/弹出窗口(HTML元素)
- 根据 IP 向 Web 访问者显示自定义消息
- 如何使用人力车库在折线图上显示自定义工具提示
- 无法显示自定义对话框
- 使用相对文件路径在 Google 地图中显示自定义标记
- 如何在移动浏览器的屏幕顶部显示自定义警报
- Wavesurfer.js:如何显示自定义标记
- 在谷歌地图中按类型显示自定义图像标记图标
- 如何在检测到浏览器关闭事件时显示自定义弹出窗口
- 通过jQuery在Html.ValidationMessageFor中显示自定义错误
- 自定义HTML5表单验证最初未显示自定义错误
- 在剑道装载指示器上显示自定义文本
- 如何在jqGrid中隐藏和显示自定义按钮通过使用"reccount”;