【发布时间】:2020-03-04 22:11:55
【问题描述】:
如果数据集中有任何布尔字段并且我没有使用 react-table,我可以通过什么方式选中/取消选中所有复选框?对于单个复选框正在工作,但并非对所有人都有效。谢谢你的任何提示。我将复选框命名为表中数据的对应名称,但它不起作用。
这是我的课:
class Boxes extends React.Component {
constructor(props) {
super(props);
this.state = {
datas: [
{name: "name1", status: 1},
{name: "name3", status: 0},
{name: "name2", status: 2},
],
checkboxes: [],
selectAll: true,
};
this.toggleAllChange = this.toggleAllChange.bind(this);
this.toggleOneChange = this.toggleOneChange.bind(this);
}
toggleAllChange(event) {
let checked = event.target.checked;
console.log(checked);
this.setState({
checkAll: checked,
checkboxes: document.getElementsByClassName("chbx")
});
for (let i in this.state.checkboxes){
let nameAct = this.state.checkboxes.item(i).name;
let checkbox = document.getElementsByName(nameAct);
this.setState({
[nameAct]: checked
});
}
}
toggleOneChange(event) {
const target = event.target;
const value = target.checked;
const name = target.name;
this.setState({
[name]: value
});
}
还有我在渲染方法中的表格:
<div className="input-group mb-3">
<InputGroup className="mb-3">
<input
type="checkbox"
value="checkAll"
defaultChecked={this.state.selectAll}
onChange={this.toggleAllChange.bind(this)}/>
Check/Uncheck All
</InputGroup>
</div>
<Table responsive>
<thead className="text-primary">
<tr>
<th>Data name</th>
<th>Data status</th>
<th>Check</th>
</tr>
</thead>
<tbody>
{this.state.datas.map(data => (
<tr>
<td>{data.name}</td>
<td>{data.status}</td>
<td>
<input
className="chbx"
type="checkbox"
id={"chbx" + data.name}
name={"chbx" + data.name}
defaultChecked={this.state.selectAll}
onChange={this.toggleOneChange.bind(this)}
/>
</td>
</tr>
))}
</tbody>
</Table>
【问题讨论】:
标签: javascript reactjs