如何根据 select 选项的值更改复选框的值?

How can I change the value of a checkbox based on the value of a select option?

我有一个表单,如果 select 输入“成员库”选项被 select 编辑,我需要在其中显示一些复选框。这会动态显示可用的项目。如果来自同一个 select 输入某人 select 的“免费”,这些复选框将被隐藏并显示不同的项目。我在我的代码中显示和隐藏了复选框,但是当我隐藏复选框时,我想清除复选框,以便在“免费”选项为 selected 时取消选中它们。当 select 选项更改时,我试图将选中的更改为 false,但我似乎无法开始工作。我试过将它放在我的 raceHide 函数中,当我无法让它工作时,我尝试将它作为一个单独的函数。如果能帮助我朝着正确的方向前进,我们将不胜感激。

const memberSelect = document.querySelectorAll('.sf-field-post-meta-edu_member select');
function raceHide() {  
  const raceShow = document.querySelectorAll('.searching ul li.sf-field-post-meta-edu_race_approved');
  
  for(var j = 0; j < raceShow.length; j++) {
    if (memberSelect[j].value === "Member Library") {
      raceShow[j].style.display = "block";
    } else if (memberSelect[j].value === "Free") {
      raceShow[j].style.display = "none";
      
    } else {
      raceShow[j].style.display = "none";
    }    
  } 
}   

for (var i = 0; i < memberSelect.length; i++) {
  memberSelect[i].addEventListener('change', raceHide, false);
}

function clearRace() {
  var raceCheckboxNo = document.querySelectorAll('.searching ul li.input#sf-input');
  var raceCheckboxYes = document.querySelectorAll('.searching ul li.input#sf-input');

  for(var j = 0; j < raceCheckboxNo.length; j++) { 
    if (memberSelect[j].value === "Free") {
      raceCheckboxNo[j].checked = false; 
      raceCheckboxYes[j].checked = false;
    }    
  }
}
for (var k = 0; k < memberSelect.length; k++) {
  memberSelect[k].addEventListener('change', clearRace, false);
}

这是我在 Daniel 的帮助下最终使用的。

const memberSelect = document.querySelectorAll('.sf-field-post-meta-edu_member select');
function raceHide() {  
  const raceShow = document.querySelectorAll('.searchandfilter ul li.sf-field-post-meta-edu_race_approved');
  const raceCheckboxNo = document.querySelectorAll('.searchandfilter ul li.sf-field-post-meta-edu_race_approved ul li input.sf-input-checkbox');
  const raceCheckboxYes = document.querySelectorAll('.searchandfilter ul li.sf-field-post-meta-edu_race_approved ul li:last-child input.sf-input-checkbox');

  for(var j = 0; j < raceShow.length; j++) {
    if (memberSelect[j].value === "Member Library") {
      raceShow[j].style.display = "block";
    } else if (memberSelect[j].value === "Fear Free on the House") {
      raceShow[j].style.display = "none";
      console.log('TEST')
      raceCheckboxNo[j].checked = "";
      console.log('TEST2')
      raceCheckboxYes[j].checked = "";
      console.log('TEST3') 
    } else {
      raceShow[j].style.display = "none";
    }    
  } 
}   

for (var i = 0; i < memberSelect.length; i++) {
  memberSelect[i].addEventListener('change', raceHide, false);
}

这是您尝试执行的操作的非常简单的版本。 (你没有分享你的html,所以我做了一些自由,把它变成了赛马和赛车。)

您可以向 select 添加一个 onchange 函数(或者像您一样通过事件侦听器添加它)。然后 运行 通过开关块(或 if else 块)的值,如果选项 selected 具有您想要的“免费”值,请通过设置 checked = "" 清除所有复选框

我没有隐藏复选框,因为使用 css 可以很容易地做到这一点(这会使查看哪些复选框被选中变得更加困难)

function hideRaces(el) {
  switch (el.value) {
    case "horses": {
      console.log("horses selected!")
      break;
    }
    case "cars": {
      console.log("cars selected!")
      break;
    }
    case "free": {
      console.log("free all checkboxes!")
      document.getElementById("cars-only-checkbox").checked="";
      document.getElementById("horses-only-checkbox").checked="";
      break;
    }
  }
}
<form>
  <label for="race-type">Race Type</label>
  <select name="race-type" onchange="hideRaces(this);">
    <option value="cars">cars</option>
    <option value="horses">horses</option>
    <option value="free">Free checkboxes</option>
  <select>
  <div>
    <label>
      <input id="cars-only-checkbox" type="checkbox" name="free-horses" checked />
      cars only checkbox
    </label>
    <label>
      <input id="horses-only-checkbox" type="checkbox" name="free-horses" checked />
      horse only checkbox
    </label>
  </div>
</form>

我认为你可能做错了(我认为 false 在技术上应该有效)是将它们设置为 false 而不是空字符串 "" .

如果不是这样,在没有看到您的 html 的情况下我也无能为力,因为问题可能出在您的查询结构或其他方面。