簡體   English   中英

JavaScript - 如果未選中復選框,請取消選中單選按鈕

[英]JavaScript - uncheck radio button if no checkboxes are checked

我已經在這里問了一個不同的問題: JavaScript - Select 單選按鈕,如果選中了任何復選框

我有另一個問題,所以我為此創建了一個新問題。 我被告知要這樣做。 因此,新的問題。 希望沒事。

如果選中第 1 組和第 2 組中的任何 PD 復選框,我可以填充單選按鈕Radio 1 同樣,如果選中第 1 組和第 2 組中的任何 ID 復選框,我也可以填充單選按鈕Radio 2

以下是 HTML:

<form>
   <h3>Radio Buttons</h3>
   <input type="radio" name="radio1" id="radio1"> Radio 1
   <br>
   <input type="radio" name="radio2" id="radio2">Radio 2
   <br>
   <br>

   <h3>Checkbox Groups</h3>

   <h4><u>Group 1</u></h4>
   <p align="center"><u>PD</u></p>
   <ul>
      <li>
          <input id="pdcb" type="checkbox" name="G1PD1" onclick="validate()">G1 PD1</li>
      <li>
         <input id="pdcb" type="checkbox" name="G1PD2" onclick="validate()">G1 PD2</li>
   </ul>
   <p align="center"><u>ID</u></p>
   <ul>
      <li>
         <input id="idcb" type="checkbox" name="G1ID1" onclick="validate()">G1 ID1</li>
      <li>
         <input id="idcb" type="checkbox" name="G1ID2" onclick="validate()">G1 ID2</li>
   </ul>

   <h4><u>Group 2</u></h4>
   <p align="center"><u>PD</u></p>
   <ul>
      <li>
     <input id="pdcb" type="checkbox" name="G2PD1" onclick="validate()">G2 PD1</li>
      <li>
         <input id="pdcb" type="checkbox" name="G2PD2" onclick="validate()">G2 PD2</li>
   </ul>
   <p align="center"><u>ID</u></p>
   <ul>
       <li>
          <input id="idcb" type="checkbox" name="G2ID1" onclick="validate()">G2 ID1</li>
      <li>
          <input id="idcb" type="checkbox" name="G2ID2" onclick="validate()">G2 ID2</li>
   </ul>
</form>

以下是JS代碼:

function validate()
{
var pdcbClass = document.getElementsById("pdcb");
var idcbClass = document.getElementsById("idcb");
console.log(this);

for (var i = 0; i < pdcbClass.length; i++) 
{
    if (pdcbClass[i].checked == true) 
    {
        document.getElementById("radio1").checked = true;
        document.getElementById("radio2").checked = false;
    }
}

for (var i = 0; i < idcbClass.length; i++) 
{
    if (idcbClass[i].checked == true) 
    {
        document.getElementById("radio1").checked = false;
        document.getElementById("radio2").checked = true;
    }
}

var pdcbClass2 = document.getElementsByClassName("pdcb");
var idcbClass2 = document.getElementsByClassName("idcb");
console.log(this);

//if none of the checkboxes are checked, don't populate radio buttons
for (var i = 0; i < pdcbClass2.length; i++) 
{
    if (pdcbClass2[i].checked == false) 
    {
        document.getElementById("radio1").checked = false;
        document.getElementById("radio2").checked = false;
    }
}

for (var i = 0; i < idcbClass2.length; i++) 
{
    if (idcbClass2[i].checked == false) 
    {
        document.getElementById("radio1").checked = false;
        document.getElementById("radio2").checked = false;
    }
}
}

現在,我的問題是,如果沒有選中任何復選框,我將如何讓單選按鈕不被填充?

PS:我需要用純 JavaScript 寫這個。 我不能使用 jQuery。

更新:我使用的復選框類型為:

<im:checkbox id="IDCB" name="abcXYZ" onclick="validate()" />

要檢查選中了多少個復選框,您可以編寫:

var hmchkObj = [].slice.call(document.querySelectorAll('form input[type="checkbox"]')).filter(function(element, index) {
  return element.checked == true;
}).length;

到 select 您可以在querySelectorAll中使用的所有輸入復選框:

document.querySelectorAll('form input[type="checkbox"]')

這將重新調整 NodeList,因此您需要轉換為數組才能使用過濾器function。 在過濾后的元素(帶有選中 == true 的元素)上,您可以使用數組屬性length 如果此值為 0,則表示未選中任何復選框。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM