我搞乱了复选框,我想知道有没有办法可以通过调用函数取消选中按钮上的复选框?如果是这样?我怎么能这样做?
<input type="checkbox" className="checkbox"/>
<button onClick={()=>this.unCheck()}
如何以编程方式取消选中该复选框,如果我有多个使用map函数动态生成的复选框,该怎么办? 如果我愿意,我怎样才能取消选中它们?
答案 0 :(得分:7)
您可以使用复选框checked
的属性来切换复选框的状态。
可能的方法:
1 - 您可以使用ref
复选框和onClick
按钮,使用ref
即可取消选中复选框。
2 - 您可以使用受控元素,意味着将复选框的状态存储在state
变量中,并在点击按钮时更新。
通过使用ref 检查此示例,为每个复选框分配一个唯一的ref
,然后在onClick函数内传递该项的索引,使用该索引切换特定的{{1} }:
checkBox
&#13;
class App extends React.Component{
constructor(){
super();
this.state = {value: ''}
}
unCheck(i){
let ref = 'ref_' + i;
this.refs[ref].checked = !this.refs[ref].checked;
}
render(){
return (
<div>
{[1,2,3,4,5].map((item,i) => {
return (
<div>
<input type="checkbox" checked={true} ref={'ref_' + i}/>
<button onClick={()=>this.unCheck(i)}>Toggle</button>
</div>
)
})}
</div>
)
}
}
ReactDOM.render(<App/>, document.getElementById('app'))
&#13;
选中受控元素的示例,表示在<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
<div id='app'/>
变量中存储state
复选框,点击按钮更改其值:
state
&#13;
class App extends React.Component{
constructor(){
super();
this.state = {value: []}
}
onChange(e, i){
let value = this.state.value.slice();
value[i] = e.target.checked;
this.setState({value})
}
unCheck(i){
let value = this.state.value.slice();
value[i] = !value[i];
this.setState({value})
}
render(){
return (
<div>
{[1,2,3,4,5].map((item,i) => {
return (
<div>
<input checked={this.state.value[i]} type="checkbox" onChange={(e) => this.onChange(e, i)}/>
<button onClick={()=>this.unCheck(i)}>Toggle</button>
</div>
)
})}
</div>
)
}
}
ReactDOM.render(<App/>, document.getElementById('app'))
&#13;
答案 1 :(得分:1)
复选框具有已检查属性,您可以将其挂接到状态并动态更改它。请查看以下链接:
https://facebook.github.io/react/docs/forms.html#handling-multiple-inputs
答案 2 :(得分:1)
使用普通的javascript,您可以像下面一样实现。
function unCheck() {
var x = document.getElementsByClassName("checkbox");
for(i=0; i<=x.length; i++) {
x[i].checked = false;
}
}
答案 3 :(得分:1)
我在想这样的事情:
<input onChange={(input) => this.onFilterChange(input)} className="form-check-input" type="checkbox" />
onFilterChange = (input) => { let { value, checked } = input.target;}
unCkeckAll = () => {
[...document.querySelectorAll('.form-check-input')].map((input) => {
if (input.checked) {
let fakeInput = {
target: {
value: input.value,
checked: false
}
}
input.checked = !input.checked;
this.onFilterChange(fakeInput);
}
return null;
})
}
答案 4 :(得分:0)
反应
已选中
<input type="radio" name="count" value="minus" onChange={this.handleRadioChange} checked={this.state.operation == "minus"} /> Decrement
2。使用参考
<input type="radio" name="count" ref="minus" /> Decrement
onSubmit(e){ this.refs.minus.checked = false }
答案 5 :(得分:0)
有时候使用纯JavaScript会很好。如果您在任何状态下都具有复选框值,请尝试
import React, {useState, useEffect} from 'react';
const App = () => {
const handleChange = () => {
....
}
return (
<div className="btn" data-testid='button' type="button"
onClick={handleChange}><span>Add</span></div>
);
}