【问题标题】:Checkbox issue oncheck function复选框问题oncheck函数
【发布时间】:2025-12-27 23:35:15
【问题描述】:

请先看下面的代码。 我希望特定的复选框(带有 id cfc1)在点击它时不会被勾选。 我在那里使用了onCheck 函数。我没有找到任何方法可以在单击特定元素时将其显示为未选中状态。我正在尝试使用代码 -

if(e.currentTarget.id === 'cfc1') {
    document.getElementById(e.currentTarget.id).checked = false; 
}

但它不起作用。

如何使用onCheck函数实现?

import React, {Component} from 'react';
import Checkbox from 'material-ui/Checkbox';

class Checkboxes extends Component {
  constructor() {
     super();
     this.state = {
        checkids:['cfc0', 'cfc1', 'cfc2', 'cfc3']
     };
     this.handleCheck = this.handleCheck.bind(this);
     this.getElements = this.getElements.bind(this);
  }
  getElements() {
     let arr = [];
     this.state.checkids.forEach(function(element) {
        arr.push(
          <Checkbox
             id={element}
             onCheck={this.handleCheck}
          />
        );
     }, this)
     return arr;
  }
  handleCheck(e) {
     console.log(e.currentTarget.id);
     console.log(e.currentTarget.checked);
  }
  render() {
     return(
       <div>
          {this.getElements()}
       </div>
     );
  }
}
export default Checkboxes

【问题讨论】:

    标签: javascript html reactjs material-ui web-component


    【解决方案1】:

    要使其适用于您的用例,请尝试使用一个状态变量来维护每个元素 ID 的检查信息。

    onCheck 处理程序中,通过设置状态来切换除所需框之外的所有框的复选框。

    WORKING DEMO

    class App extends Component {
      constructor() {
        super();
         this.state = {
            checkids:{
              'cfc0': false,
              'cfc1': false, 
              'cfc2': false,
              'cfc3': false
            }
         };
      }
    
      handleCheck(e) {
         const checkids = {...this.state.checkids};
         checkids[e.target.id] = e.target.id === "cfc1" ? false : !checkids[e.target.id];
    
         this.setState({checkids});
      }
    
      getElements() {
         let arr = [];
         Object.keys(this.state.checkids).forEach(function(element, index) {
            arr.push(
              <Checkbox
                 key={index}
                 id={element}
                 checked={this.state.checkids[element]}
                 onCheck={this.handleCheck.bind(this)}
              />
            );
         }, this)
         return arr;
      }
    
      render() {
        return (
          <MuiThemeProvider>
            <div>
              {this.getElements()}
           </div>
          </MuiThemeProvider>
        );
      }
    }
    

    【讨论】:

    • 抱歉,我稍微修改了我的问题。如何使用 onCheck 功能做到这一点?
    • 我正在尝试在 handleCheck 函数中使用此代码。但它不起作用。 - if(e.currentTarget.id === 'cfc1') { document.getElementById(e.currentTarget.id).checked = false; }
    • 那行不通,因为它第一次执行时会检查它。我会尽快添加更新,但您的用例是什么要求您仅在 onCheck 处理程序中执行此操作?
    • 是的。谢谢关心的朋友。这就是为什么刚才我再次编辑了这个问题。我实际上遇到了这种问题。
    • 更新了答案,请看。
    【解决方案2】:

    您可以通过 javascript 使用this.checked = false

    document.getElementById('cfc1').onclick = function() {
      this.checked = false;
    }
    &lt;label&gt;&lt;input type="checkbox" id="cfc1"&gt;Click&lt;/label&gt;

    【讨论】:

    • 你能用 onCheck 函数事件处理器来做这件事吗?
    • 我正在尝试在 handleCheck 函数中使用此代码。但它不起作用。 - if(e.currentTarget.id === 'cfc1') { document.getElementById(e.currentTarget.id).checked = false; }