如何在react js中为数组获取多个复选框值?这是我在API中的动态目的地。我希望用一个数组发布到Backend。
{
this.state.destination.length > 0 ? (
this.state.destination.map((destination, index) => (
<div className="col-md-3">
<div class="pretty p-default">
<input type="checkbox" name="dest" value={index} onClick={event => this.handleDestination(event)} />
<div class="state p-primary">
<label>{destination.dest_name}</label>
</div>
</div>
</div>
))
) : (
<div>
<label>
<b>No results found ! </b>{' '}
</label>
</div>
);
}
handleDestination(event) {
const options=this.state.options
let index
if(event.target.checked){
options.push(+event.target.value)
}
else{
index=options.indexOf(+event.target.value)
options.splice(index,1)
}
this.setState({ options:options})
}
答案 0 :(得分:1)
您可以使用额外参数绑定handleDestination
方法 - checked元素的索引:
this.handleDestination.bind(this, index)
工作示例fiddle
:
class Example extends React.Component {
...
onToggle(index, e){
let newItems = this.state.items.slice();
newItems[index].checked = !newItems[index].checked
this.setState({ items: newItems })
}
render() {
return (
<div>
<ul>
{this.state.items.map((item, i) =>
<li key={i}>
{item.text}
// binding an index
<input type="checkbox" onChange={this.onToggle.bind(this, i)} />
</li>
)}
</ul>
<br/>
// filter by checked element
You checked: {JSON.stringify(this.state.items.filter(item => item.checked))}
</div>
)
}
}
<强>更新强> 对于您的代码 - 更改
this.handleDestination(event)
到
this.handleDestination.bind(this, index)
^^^^^^^^^^^^^^^^^
然后将handleDestination
方法修改为与上面所做的类似:
handleDestination(index, event){
console.log(index) // checked element index
console.log(this.props.destination[index]) // your checked element
...
}
希望它会有所帮助
答案 1 :(得分:0)
这是我在项目中使用的类似模式。您可以在这里参考。
state = {
form: {
companyType: '',
services: [],
name: '',
surname: '',
email: '',
concepts: [],
technologies: [],
},
};
public handleChange = (event: any) => {
const { name } = event.target;
const checkedArr = [];
let value;
if (event.target.type !== 'checkbox') {
value = event.target.value;
} else {
const checkeds = document.getElementsByTagName('input');
for (let i = 0; i < checkeds.length; i++) {
if (checkeds[i].checked) {
checkedArr.push(checkeds[i].value);
}
}
value = checkedArr;
}
const { form } = this.state;
form[name] = value;
this.setState({ form });
};
我正在将复选框值放入数组。