限制反应中的多项选择

Posted

技术标签:

【中文标题】限制反应中的多项选择【英文标题】:Limit multiple selection in react 【发布时间】:2021-12-24 05:00:14 【问题描述】:

我试图弄清楚如何限制多选选项中的选择数量。例如:如果我的选项总数为 6,但用户不应选择超过 3 个。 这是我的代码,我正在制作一个基于反应的项目

import * as React from 'react';
import  useTheme  from '@mui/material/styles';
import TextField from '@mui/material/TextField';



function CoFounder() 
    return (
    <>
      <div class="mkw_figure">
       <h1 class="mkw_headline">
        Co Founders Match 
        </h1> 

        <h5 class="mkw_subheadline">
          Get the best matching Co Founder profile to connect and try your startup
        </h5>

        <h3 class="mkw_subheadline" style=fontSize: 'x-large', margin: '0px', float: 'left', marginLeft: '80px', display: 'inline'>
          Co Founder skills you require
        </h3>

        <TextField placeholder="First skill would be priority skill. Type Own or Select from below"></TextField> 

<div id="pill_multiselect" class="pill_multiselect">

    <label class="PillList-item">
  <input type="checkbox" name="feature" onClick="return myfun()" value="1" />
  <span class="PillList-label">Business Development
  <span class="Icon Icon--checkLight Icon--smallest"><i class="fa fa-check"></i></span>

  </span>
</label>
    <label class="PillList-item">
  <input type="checkbox" name="feature" onClick="return myfun()" value="2" />
  <span class="PillList-label">Marketing
  <span class="Icon Icon--checkLight Icon--smallest"><i class="fa fa-check"></i></span>

  </span>
</label> <label class="PillList-item">
  <input type="checkbox" name="feature" onClick="return myfun()" value="3" />
  <span class="PillList-label">Coding
  <span class="Icon Icon--checkLight Icon--smallest"><i class="fa fa-check"></i></span>

  </span>
</label>
<label class="PillList-item">
  <input type="checkbox" name="feature" onClick="return myfun()" value="3" />
  <span class="PillList-label">UI/UX
  <span class="Icon Icon--checkLight Icon--smallest"><i class="fa fa-check"></i></span>
  </span>
</label><label class="PillList-item">
  <input type="checkbox" name="feature" onClick="return myfun()" value="3" />
  <span class="PillList-label">Product Management
  <span class="Icon Icon--checkLight Icon--smallest"><i class="fa fa-check"></i></span>

  </span>
</label><label class="PillList-item">
  <input type="checkbox" name="feature" onClick="return myfun()" value="3" />
  <span class="PillList-label">Leadership
  <span class="Icon Icon--checkLight Icon--smallest"><i class="fa fa-check"></i></span>

  </span>
</label><label class="PillList-item">
  <input type="checkbox" name="feature" onClick="return myfun()" value="3" />
  <span class="PillList-label">Operations
  <span class="Icon Icon--checkLight Icon--smallest"><i class="fa fa-check"></i></span>

  </span>
</label>
  </div>
<div> <span id="not-valid" style=color:'red'> </span></div>

 <button class="mkw_test_apply_btn">Search</button>
      </div>    
    </>
  );



export default CoFounder;

从之前关于这个话题的讨论中,我知道我可以用它来限制选择

 <script type="text/javascript">


        $(document).ready(function() 

          var last_valid_selection = null;

          $('#userRequest_activity').change(function(event) 

            if ($(this).val().length > 3) 

              $(this).val(last_valid_selection);
             else 
              last_valid_selection = $(this).val();
            
          );
        );
        </script>

但是我无法将它复制到我的反应文件中,这给了我错误。请提出解决此问题的方法。

【问题讨论】:

【参考方案1】:

在您的内部onClick 函数增加一个计数器(状态变量),如果它是 3,则禁用复选框,如下所示:

const [counter, setCounter] = React.useState(0);

const myFun = () => 
    setCounter(counter + 1);


return (
    ...
    <input disabled=counter >= 3 ... />
    ...
);

编辑 试试:

<input counter >= 3 ? disabled :  ... />

【讨论】:

您是否尝试过将其合并到代码中,因为这种方法对我不起作用。我仍然可以选择超过 3 个选项。 @JanenderSharma 我添加了一个编辑

以上是关于限制反应中的多项选择的主要内容,如果未能解决你的问题,请参考以下文章

如何防止 optgroups ios Safari 中的多项选择

报表生成器 3 中的多项选择

TreeView 中的多项选择

如何防止 nattable 中的多项选择?

将 Django 中的多对多关系表示为两个多项选择

带有 mnlogit() 的 R 中的多项 Logit 选择模型