首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何有条件地禁用复选框?

如何有条件地禁用复选框?
EN

Stack Overflow用户
提问于 2021-08-20 16:53:27
回答 2查看 57关注 0票数 0

我有一个带有复选框的表单。选中最大复选框数时,我需要禁用该复选框。这就是我到目前为止所尝试的:

代码语言:javascript
运行
复制
const maxOptions = 2;
const optionChecked = []
const checkedCount = optionChecked.length;

function handleChecked(e) {
    let index;
    if (e.target.checked) {
        optionChecked.push(
            e.target.value
        )
    } else {
        index = optionChecked.indexOf(+e.target.value)
        optionChecked.splice(index, 1)
    }

    console.log(optionChecked.length)
}

//my checkbox
{Opcoes.map((a) => (
    <section className='product-options'>
        <a>
            <text> {a.Nome} </text>
            <input type='checkbox' 
              value = {a.ID}
              onChange = {(e) => handleChecked(e) }
              disabled = {!optionChecked[a.ID] && checkedCount === maxOptions ? true: false}             
            ></input>
        </a>
    </section>
))}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-08-20 23:23:04

代码语言:javascript
运行
复制
const maxOptions = 2;
const [checkedCount, setCheckedCount] =useState(0) 

function handleChecked(e) {
    
       e.target.checked?setCheckedCount(prevCount=>prevCount+1):setCheckedCount(prevCount=>prevCount-1)
     } 

    console.log(checkedCount)


//my checkbox
{Opcoes.map((a) => (
    <section className='product-options'>
        <a>
            <text> {a.Nome} </text>
            <input type='checkbox' 
              value = {a.ID}
              onChange = {(e) => handleChecked(e) }
              disabled = { checkedCount ===maxOptions}             
            ></input>
        </a>
    </section>
))}
票数 2
EN

Stack Overflow用户

发布于 2021-08-26 21:54:56

如果你想启用选中的元素,你可以这样做:

代码语言:javascript
运行
复制
import { useState, useRef, createRef } from "react";

    function App() {
      const maxOptions = 1;
      const [checkedCount, setCheckedCount] = useState(0);
    
      function handleChecked(e) {
        e.target.checked
          ? setCheckedCount((prevCount) => prevCount + 1)
          : setCheckedCount((prevCount) => prevCount - 1);
      }
    
      const Opcoes = [
        { Nome: "pepita", ID: "1" },
        { Nome: "pepito", ID: "2" },
      ];
    
      let items = useRef(Opcoes.map(() => createRef()));
    
      return (
        <>
          <div>
            {Opcoes.map((a, ind) => (
              <section className="product-options" key={ind}>
                <a>
                  <text> {a.Nome} </text>
                  <input
                    type="checkbox"
                    value={a.ID}
                    onChange={(e) => handleChecked(e)}
                    ref={items.current[ind]}
                    disabled={
                      checkedCount === maxOptions &&
                      !items?.current[ind]?.current.checked
                    }
                  ></input>
                </a>
              </section>
            ))}
          </div>
        </>
      );
    }
    
    export default App;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68865631

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档