在reactjs中以编程方式取消选中复选框

时间:2017-04-25 05:53:24

标签: javascript reactjs checkbox

我搞乱了复选框,我想知道有没有办法可以通过调用函数取消选中按钮上的复选框?如果是这样?我怎么能这样做?

<input type="checkbox" className="checkbox"/>
<button onClick={()=>this.unCheck()}

如何以编程方式取消选中该复选框,如果我有多个使用map函数动态生成的复选框,该怎么办? 如果我愿意,我怎样才能取消选中它们?

6 个答案:

答案 0 :(得分:7)

您可以使用复选框checked的属性来切换复选框的状态。

可能的方法:

1 - 您可以使用ref复选框和onClick按钮,使用ref即可取消选中复选框。

2 - 您可以使用受控元素,意味着将复选框的状态存储在state变量中,并在点击按钮时更新。

通过使用ref 检查此示例,为每个复选框分配一个唯一的ref,然后在onClick函数内传递该项的索引,使用该索引切换特定的{{1} }:

&#13;
&#13;
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;
&#13;
&#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复选框,点击按钮更改其值:

&#13;
&#13;
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;
&#13;
&#13;

答案 1 :(得分:1)

复选框具有已检查属性,您可以将其挂接到状态并动态更改它。请查看以下链接:

https://facebook.github.io/react/docs/forms.html#handling-multiple-inputs

http://react.tips/checkboxes-in-react/

答案 2 :(得分:1)

使用普通的javascript,您可以像下面一样实现。

 function unCheck() {
   var x = document.getElementsByClassName("checkbox");
   for(i=0; i<=x.length; i++) {
      x[i].checked = false;
    }   
 }

Small DEMO

答案 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)

  

反应

已选中

  1. 使用状态
     <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>
     );
  }