仅选中九个复选框中的三个时如何显示警报?

How to display an alert when only three of nine checkboxes are checked?

我在我的网站中实施了以下代码,以便在选中三个名为 "correct" 的复选框时发出警报。

<input type="checkbox" name="correct"/>
<input type="checkbox" name="correct"/>
<input type="checkbox" name="correct"/>

const correctInputs = [...document.querySelectorAll('input[name="correct"]')];

const alertIfThree = () => {
  const checkedCorrectInputs = correctInputs.filter(input => input.checked);
  if (checkedCorrectInputs.length > 2) {
    alert('Alert');
  }
};

correctInputs.forEach(input => input.addEventListener('click', alertIfThree));

但是,我也有6个名为"incorrect"的复选框,当检查这些复选框中的任何一个,我都不希望制作警报,即使检查了三个复选框,也没有检查复选框。

<input type="checkbox" name="incorrect"/>
<input type="checkbox" name="incorrect"/>
<input type="checkbox" name="incorrect"/>
<input type="checkbox" name="incorrect"/>
<input type="checkbox" name="incorrect"/>
<input type="checkbox" name="incorrect"/>

如何更改我的代码来实现它? 提前致谢!

您需要检查 input.checked 和 input.getAttribute("name") 在箭头函数中的值是否正确

你可以保持相同的逻辑

const correctInputs = [...document.querySelectorAll('input[name="correct"]')];
const incorrectInputs = [...document.querySelectorAll('input[name="incorrect"]')];

const alertIfThree = () => {
    const checkedCorrectInputs = correctInputs.filter(input => input.checked);
    const checkedIncorrectInputs = incorrectInputs.filter(input => input.checked);

    if (incorrectInputs.length === 0 && checkedCorrectInputs.length > 2) {
        alert('Alert');
    }
};

我认为最好的方法是同时查询不正确的复选框,并在您的 if 语句中添加一个额外的条件..

 const IncorrectInputs = 
 [...document.querySelectorAll('input[name="incorrect"]')]; //check the incorrect values as well..

const alertIfThree = () => {
  const checkedCorrectInputs = correctInputs.filter(input => 
  input.checked);

  const checkedIncorrectInputs = IncorrectInputs.filter(input => 
  input.checked);

  if (checkedCorrectInputs.length > 2 && checkedIncorrectInputs<=0 ) {
    alert('Alert');
  }
};