如果在 HTML/JavaScript 中选中了复选框,则填充单选按钮

Populate radio button if checkbox is checked in HTML/JavaScript

我正在尝试编写一个 JavaScript 代码,如果某个组中的任何复选框被选中,那么应该填充一个单选按钮。

以下是我正在处理的代码:

<html>
<head>
    <title>Radio buttons and checkboxes</title>
</head>

<body>
    <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 type="checkbox" name="G1PD1">G1 PD1</li>
            <li><input type="checkbox" name="G1PD2">G1 PD2</li>
        </ul>
        <p align="center"><u>ID</u></p>
        <ul>
            <li><input type="checkbox" name="G1ID1">G1 ID1</li>
            <li><input type="checkbox" name="G1ID2">G1 ID2</li>
        </ul>

        <h4><u>Group 2</u></h4>
        <p align="center"><u>PD</u></p>
        <ul>
            <li><input type="checkbox" name="G2PD1">G2 PD1</li>
            <li><input type="checkbox" name="G2PD2">G2 PD2</li>
        </ul>
        <p align="center"><u>ID</u></p>
        <ul>
            <li><input type="checkbox" name="G2ID1">G2 ID1</li>
            <li><input type="checkbox" name="G2ID2">G2 ID2</li>
        </ul>
    </form>
</body>
</html>

这是我希望 JavaScript 执行的操作。如果选中第 1 组和第 2 组中 PD 部分下的任何复选框,则应填充单选按钮 Radio 1。同样,如果选中第 1 组和第 2 组 ID 部分下的任何复选框,则应填充单选按钮 Radio 2

如何为此编写 jQuery 或 JavaScript 代码?

更新

使用@gibberish 的回答,我能够编写这个 JS 代码:

<script>
    $('input:checkbox').click(function(){
var cc = this.className;
if (cc=="pdcb"){
    $('#radio2').prop('checked',false);
    $('#radio1').prop('checked',true);
}else if (cc=="idcb"){
    $('#radio1').prop('checked',false);
    $('#radio2').prop('checked',true);
}
  else
  {
    $('#radio1').prop('checked',false);
    $('#radio2').prop('checked',false);
  }
});
</script>

我的新问题是,如果未选中 none 个复选框,我该如何取消选择两个单选按钮?

不确定这是否有效,但应该可以让您知道该怎么做.. 如果需要,您还可以尝试在单选按钮和复选框上添加一些切换。

$(document).ready(function() {    
     $(":checkbox").change(function () {
         if($(this).is(":checked")) {
             var selection = $(this).parent().parent().prev().text();
             if(selection == "PD") 
                 $("#radio1").prop("checked", true);
             else
                 $("#radio2").prop("checked", true)
         }    
     });
});

如果您为两个复选框组分配不同的类名,将更容易确定要做什么。

这是一个代码示例,包括堆栈代码片段和 jsFiddle Demo (因为它们更容易让您 fiddle 使用)

$('input:checkbox').click(function(){
 var cc = this.className;
 if (cc=="pdcb"){
  $('#radio2').prop('checked',false);
  $('#radio1').prop('checked',true);
 }else if (cc=="idcb"){
  $('#radio1').prop('checked',false);
  $('#radio2').prop('checked',true);
 }
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<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 class="pdcb" type="checkbox" name="G1PD1">G1 PD1</li>
      <li>
         <input class="pdcb" type="checkbox" name="G1PD2">G1 PD2</li>
   </ul>
   <p align="center"><u>ID</u></p>
   <ul>
      <li>
         <input class="idcb" type="checkbox" name="G1ID1">G1 ID1</li>
      <li>
         <input class="idcb" type="checkbox" name="G1ID2">G1 ID2</li>
   </ul>

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

一种简单的方法是在 onclick 事件上调用函数,将单选控件 ID 作为参数传递。在您使用该函数编辑的代码下方。

<html>
<head>
    <script type="text/javascript">
        function checkRadio(checkBoxId) {
            var radio = document.getElementById(checkBoxId);
            if (!radio.checked)
                radio.checked = true;
        }

    </script>

    <title>Radio buttons and checkboxes</title>
</head>

<body>
    <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 type="checkbox" name="G1PD1" onclick="checkRadio('radio1')">G1 PD1</li>
            <li><input type="checkbox" name="G1PD2" onclick="checkRadio('radio1')">G1 PD2</li>
        </ul>
        <p align="center"><u>ID</u></p>
        <ul>
            <li><input type="checkbox" name="G1ID1" onclick="checkRadio('radio2')">G1 ID1</li>
            <li><input type="checkbox" name="G1ID2" onclick="checkRadio('radio2')">G1 ID2</li>
        </ul>

        <h4><u>Group 2</u></h4>
        <p align="center"><u>PD</u></p>
        <ul>
            <li><input type="checkbox" name="G2PD1" onclick="checkRadio('radio1')">G2 PD1</li>
            <li><input type="checkbox" name="G2PD2" onclick="checkRadio('radio1')">G2 PD2</li>
        </ul>
        <p align="center"><u>ID</u></p>
        <ul>
            <li><input type="checkbox" name="G2ID1" onclick="checkRadio('radio2')">G2 ID1</li>
            <li><input type="checkbox" name="G2ID2" onclick="checkRadio('radio2')">G2 ID2</li>
        </ul>
    </form>
</body>
</html>

这回答了你的问题。

请注意,我使用了几种不同的 select 复选框/单选按钮方法。真的,有两种方法:select一次,selectPD和ID分开。

然后,我展示了几种不同的方法来取消select单选按钮:页面上的所有单选按钮,两个单选按钮都通过指定每个 ID...

希望随着项目的发展,您可以查看此答案并获得新的提示。

This is a useful resource 关于如何轮询 (select) 不同类型的元素(例如按 ID,按 class,作为一个组, ETC)。请注意,jQuery 使用 CSS select 或,因此学习它们是有用的。

$('input:checkbox').click(function(){
 var cc = this.className;
 if (cc=="pdcb"){
  $('#radio2').prop('checked',false);
  $('#radio1').prop('checked',true);
 }else if (cc=="idcb"){
  $('#radio1').prop('checked',false);
  $('#radio2').prop('checked',true);
 }
   //This is one way (gets them all)
   var num = $("[type='checkbox']:checked").length;
 alert(num);
 //This is another (gets each group)
 var lenPD = $('input[class=pdcb]:checked').length;
 var lenID = $('input[class=idcb]:checked').length;
 alert(lenPD +' / '+ lenID);
  
 //All three below methods work - choose your favorite
 //if (num==0) $('#radio1,#radio2').prop('checked',false);
 //if (lenPD==0 && lenID==0) $('input:radio').prop('checked',false);
 if (lenPD==0 && lenID==0) $('#radio1,#radio2').prop('checked',false);
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<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 class="pdcb" type="checkbox" name="G1PD1">G1 PD1</li>
      <li>
         <input class="pdcb" type="checkbox" name="G1PD2">G1 PD2</li>
   </ul>
   <p align="center"><u>ID</u></p>
   <ul>
      <li>
         <input class="idcb" type="checkbox" name="G1ID1">G1 ID1</li>
      <li>
         <input class="idcb" type="checkbox" name="G1ID2">G1 ID2</li>
   </ul>

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

Updated jsFiddle Demo