html เลือกช่องทำเครื่องหมายเดียวในกลุ่ม


126

ฉันจะอนุญาตให้ผู้ใช้เลือกช่องทำเครื่องหมายเพียงช่องเดียวได้อย่างไร

ฉันรู้ว่าปุ่มตัวเลือกนั้น "เหมาะอย่างยิ่ง" แต่สำหรับจุดประสงค์ของฉัน ... มันไม่ใช่

ฉันมีฟิลด์ที่ผู้ใช้ต้องเลือกตัวเลือกใดตัวเลือกหนึ่งหรือสองตัวเลือก แต่ไม่ใช่ทั้งสองอย่าง ปัญหาคือฉันต้องการให้ผู้ใช้ของฉันสามารถยกเลิกการเลือกตัวเลือกของพวกเขาได้และนี่คือจุดที่ปุ่มตัวเลือกล้มเหลวเนื่องจากเมื่อคุณเลือกกลุ่มแล้วคุณต้องเลือกตัวเลือก

ฉันจะตรวจสอบความถูกต้องของข้อมูลผ่าน php แต่ฉันยังคงต้องการ จำกัด ผู้ใช้ไว้เพียงคำตอบเดียวหากพวกเขาต้องการให้


1
ด้วย HTML เท่านั้นสิ่งนี้ไม่สามารถทำได้ คุณจะต้องใช้ JavaScript หากคุณเปิดใช้ jQuery ฉันสามารถให้วิธีแก้ปัญหาได้อย่างรวดเร็ว
Surreal Dreams

12
แล้วปุ่มตัวเลือกพิเศษที่มีข้อความว่า "ไม่มี" ล่ะ
FelipeAls

2
ตัวเลือกที่ 3 ไม่เข้ากันได้ดีกับการออกแบบของฉัน ... ทางเลือกที่ดีแม้ว่า :)
user962449

2
ช่องทำเครื่องหมายที่มีตัวเลือกเดียวจริงๆแล้วคือปุ่มตัวเลือก สิ่งนี้จะไม่ทำให้ผู้ใช้ประหลาดใจหรือ
Gherman

@Surreal Dreams สามารถทำได้ใน HTML ดูคำตอบของฉัน ในกรณีส่วนใหญ่ JS นั้นง่ายกว่าและไม่จำเป็นต้องแฮ็ก
SamGoody

คำตอบ:


179

ตัวอย่างนี้จะ:

  • อนุญาตให้จัดกลุ่มเช่นปุ่มวิทยุ
  • ทำหน้าที่เหมือนวิทยุ
  • อนุญาตให้ยกเลิกการเลือกทั้งหมด

// the selector will match all input controls of type :checkbox
// and attach a click event handler 
$("input:checkbox").on('click', function() {
  // in the handler, 'this' refers to the box clicked on
  var $box = $(this);
  if ($box.is(":checked")) {
    // the name of the box is retrieved using the .attr() method
    // as it is assumed and expected to be immutable
    var group = "input:checkbox[name='" + $box.attr("name") + "']";
    // the checked state of the group/box on the other hand will change
    // and the current value is retrieved using .prop() method
    $(group).prop("checked", false);
    $box.prop("checked", true);
  } else {
    $box.prop("checked", false);
  }
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>


<div>
  <h3>Fruits</h3>
  <label>
    <input type="checkbox" class="radio" value="1" name="fooby[1][]" />Kiwi</label>
  <label>
    <input type="checkbox" class="radio" value="1" name="fooby[1][]" />Jackfruit</label>
  <label>
    <input type="checkbox" class="radio" value="1" name="fooby[1][]" />Mango</label>
</div>
<div>
  <h3>Animals</h3>
  <label>
    <input type="checkbox" class="radio" value="1" name="fooby[2][]" />Tiger</label>
  <label>
    <input type="checkbox" class="radio" value="1" name="fooby[2][]" />Sloth</label>
  <label>
    <input type="checkbox" class="radio" value="1" name="fooby[2][]" />Cheetah</label>
</div>


3
การใช้งานที่ถูกต้องคือการใช้ $ (this) .is (": checked") the "is" เพื่อตรวจสอบว่ามีการทำเครื่องหมายในช่อง if {... } else {... } ที่นี่ ... jsfiddle .net / zGEaa / 31
sergioadh

2
โปรดทราบว่า .attr ไม่ทำงานอีกต่อไปให้ใช้. prop ("checked") แทน jQuery เวอร์ชันใหม่กว่า
user871784

@ user871784 - ขอบคุณสำหรับการแจ้งเตือน ... ฉันได้อัปเดตซอแล้ว!
bPratik

3
คุณพลาดตัวเลือกวิทยุ: $ ("input: checkbox.radio")
Sven

@Sven - มันจะเป็นตัวเลือกที่เจาะจงมากเกินไปในตัวอย่างนี้ ต้องบอกว่าหากหน้าเว็บมีช่องทำเครื่องหมายชุดอื่นที่ไม่ควรมีลักษณะเช่นนี้การใช้.radioตัวเลือกจะช่วยได้ ขอบคุณที่ชี้ให้เห็น :)
bPratik

101

คุณต้องการผูกchange()ตัวจัดการเพื่อให้เหตุการณ์เริ่มทำงานเมื่อสถานะของช่องทำเครื่องหมายเปลี่ยนไป จากนั้นเพียงแค่ยกเลิกการเลือกช่องทำเครื่องหมายทั้งหมดนอกเหนือจากช่องที่ทริกเกอร์ตัวจัดการ:

$('input[type="checkbox"]').on('change', function() {
   $('input[type="checkbox"]').not(this).prop('checked', false);
});

นี่คือซอ


สำหรับการจัดกลุ่มหากช่องทำเครื่องหมาย "กลุ่ม" ของคุณเป็นพี่น้องกันทั้งหมด:

<div>
    <input type="checkbox" />
    <input type="checkbox" />
    <input type="checkbox" />
</div>  
<div>
    <input type="checkbox" />
    <input type="checkbox" />
    <input type="checkbox" />
</div>   
<div>
    <input type="checkbox" />
    <input type="checkbox" />
    <input type="checkbox" />
</div>

คุณสามารถทำได้:

$('input[type="checkbox"]').on('change', function() {
   $(this).siblings('input[type="checkbox"]').prop('checked', false);
});

นี่คืออีกหนึ่งเสียงซอ


หากช่องทำเครื่องหมายของคุณถูกจัดกลุ่มตามแอตทริบิวต์อื่นเช่นname:

<input type="checkbox" name="group1[]" />
<input type="checkbox" name="group1[]" />
<input type="checkbox" name="group1[]" />

<input type="checkbox" name="group2[]" />
<input type="checkbox" name="group2[]" />
<input type="checkbox" name="group2[]" />

<input type="checkbox" name="group3[]" />
<input type="checkbox" name="group3[]" />
<input type="checkbox" name="group3[]" />

คุณสามารถทำได้:

$('input[type="checkbox"]').on('change', function() {
    $('input[name="' + this.name + '"]').not(this).prop('checked', false);
});

นี่คืออีกหนึ่งเสียงซอ


ฉันชอบรหัส (สุดท้าย) ของคุณ สั้นมากและยังคงชัดเจน ฉันไม่แน่ใจว่า 'การเปลี่ยนแปลง' จะเริ่มทำงานเมื่อคุณเปลี่ยนช่องทำเครื่องหมายอื่น ๆ หรือไม่ แต่ไม่ได้เมื่อฉันลอง ฉันชอบรหัสของคุณมากกว่า ขอบคุณ! :)
แฟรงค์ฟาจาร์โด

ฉันชอบสิ่งนี้มากฉันต้องปรับแต่งเล็กน้อยตามความต้องการของฉัน ฉันมีสองรายการดังนั้นรายการแรกจึงถูกตรวจสอบตามค่าเริ่มต้นและหากไม่เลือกรายการที่สองจะถูกตรวจสอบ สิ่งนี้ช่วยให้ฉันเริ่มต้นได้
john.weland

สวัสดี @ john.weland - คุณหมายถึงอะไรแบบนี้ ?
billyonecan

@billyonecan เกือบจะเป๊ะ แต่ด้วยความสามารถในการกำหนดเป้าหมายการจัดกลุ่มที่กำหนด แบบนี้ . ขอบคุณ
john.weland

2
บวกหนึ่งเพื่อความเรียบง่าย
ชาด

26

ปุ่มตัวเลือกเหมาะอย่างยิ่ง คุณเพียงแค่ต้องมีตัวเลือก "ไม่" ตัวที่สามซึ่งถูกเลือกโดยค่าเริ่มต้น


1
นั่นเป็นทางออกที่ดี แต่ฉันค่อนข้างยึดติดกับช่องทำเครื่องหมายเพราะการออกแบบของฉันไม่เหมาะสำหรับตัวเลือกที่ 3
user962449

6
ฉันขอแนะนำอย่างยิ่งให้เปลี่ยนการออกแบบ การทำเครื่องหมาย 0 หรือ 1 ใน 2 ตัวเลือกนี้ไม่ใช่รูปแบบทั่วไปและจะไม่ง่ายสำหรับผู้ใช้เท่าTick ​​1 จาก 3 ตัวเลือกนี้
Quentin

4
ทำไมฉันต้องเปลี่ยนการออกแบบทั้งหมดเป็น 2 ช่องทำเครื่องหมาย
user962449

9
หากการเปลี่ยนแปลงดังกล่าวทำให้คุณต้องเปลี่ยน "การออกแบบทั้งหมด" นั่นแสดงว่าการออกแบบนั้นไม่ยืดหยุ่นมากเกินไปตั้งแต่แรก
Quentin

10
มันไม่ยืดหยุ่นมันดูไม่ถูกต้อง ... มันอาจดูดีในแบบฟอร์มและแอพพลิเคชั่นดังกล่าว แต่เรามีช่องทำเครื่องหมายที่แตกต่าง
user962449

13

มีคำตอบอยู่สองสามคำสำหรับสิ่งนี้โดยใช้ JS บริสุทธิ์ แต่ไม่มีคำตอบใดที่กระชับเท่าที่ฉันต้องการ

นี่คือวิธีแก้ปัญหาของฉันโดยใช้แท็กชื่อ (เช่นเดียวกับปุ่มตัวเลือก) และจาวาสคริปต์สองสามบรรทัด

function onlyOne(checkbox) {
    var checkboxes = document.getElementsByName('check')
    checkboxes.forEach((item) => {
        if (item !== checkbox) item.checked = false
    })
}
<input type="checkbox" name="check" onclick="onlyOne(this)">
<input type="checkbox" name="check" onclick="onlyOne(this)">
<input type="checkbox" name="check" onclick="onlyOne(this)">
<input type="checkbox" name="check" onclick="onlyOne(this)">


ขอบคุณคนนี้ทำเพื่อฉันจากคนอื่น ๆ ทั้งหมด =)
kaya

6
$("#myform input:checkbox").change(function() {
    $("#myform input:checkbox").attr("checked", false);
    $(this).attr("checked", true);
});

สิ่งนี้ควรใช้ได้กับช่องทำเครื่องหมายจำนวนเท่าใดก็ได้ในแบบฟอร์ม หากคุณมีผู้อื่นที่ไม่ได้เป็นส่วนหนึ่งของกลุ่มให้ตั้งค่าตัวเลือกอินพุตที่เกี่ยวข้อง


ใช่ครับ :) ไม่เป็นไรฉันพบสิ่งที่เหมาะกับฉันแม้ว่าโซลูชันของคุณจะดูเรียบง่าย ฉันอาจทำอะไรผิดพลาดในตอนท้ายของฉัน ขอบคุณอย่างไรก็ตาม
user962449

5

นี่คือโซลูชัน HTML และ JavaScript ง่ายๆที่ฉันชอบ:

// js function อนุญาตให้ตรวจสอบช่องทำเครื่องหมายในวันธรรมดาได้ครั้งละหนึ่งช่องเท่านั้น:

function checkOnlyOne(b){

var x = document.getElementsByClassName('daychecks');
var i;

for (i = 0; i < x.length; i++) {
  if(x[i].value != b) x[i].checked = false;
}
}


Day of the week:
<input class="daychecks" onclick="checkOnlyOne(this.value);" type="checkbox" name="reoccur_weekday" value="Monday" />Mon&nbsp;&nbsp;&nbsp;
<input class="daychecks" onclick="checkOnlyOne(this.value);" type="checkbox" name="reoccur_weekday" value="Tuesday" />Tue&nbsp;&nbsp;&nbsp;
<input class="daychecks" onclick="checkOnlyOne(this.value);" type="checkbox" name="reoccur_weekday" value="Wednesday" />Wed&nbsp;&nbsp;&nbsp;
<input class="daychecks" onclick="checkOnlyOne(this.value);" type="checkbox" name="reoccur_weekday" value="Thursday" />Thu&nbsp;&nbsp;&nbsp;
<input class="daychecks" onclick="checkOnlyOne(this.value);" type="checkbox" name="reoccur_weekday" value="Friday" />Fri&nbsp;&nbsp;&nbsp;
<input class="daychecks" onclick="checkOnlyOne(this.value);" type="checkbox" name="reoccur_weekday" value="Saturday" />Sat&nbsp;&nbsp;&nbsp;
<input class="daychecks" onclick="checkOnlyOne(this.value);" type="checkbox" name="reoccur_weekday" value="Sunday" />Sun&nbsp;&nbsp;&nbsp;<br /><br />

4

ขอรหัสนี้ช่วยคุณได้

$(document).ready(function(){
$('.slectOne').on('change', function() {
   $('.slectOne').not(this).prop('checked', false);
   $('#result').html($(this).data( "id" ));
   if($(this).is(":checked"))
   	$('#result').html($(this).data( "id" ));
   else
   	$('#result').html('Empty...!');
});
});
<!DOCTYPE html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>

</head>
<body>
<input type="checkbox" class="slectOne" data-id="1 selected"/>
<input type="checkbox" class="slectOne" data-id="2 selected"/>
<input type="checkbox" class="slectOne" data-id="3 selected"/>
<input type="checkbox" class="slectOne" data-id="4 selected"/>
<input type="checkbox" class="slectOne" data-id="5 selected"/>
<input type="checkbox" class="slectOne" data-id="6 selected"/>
<input type="checkbox" class="slectOne" data-id="7 selected"/>
<input type="checkbox" class="slectOne" data-id="8 selected"/>
<input type="checkbox" class="slectOne" data-id="9 selected"/>
<input type="checkbox" class="slectOne" data-id="10 selected"/>
<span id="result"></span>
</body>
</html>

ลิงค์การทำงานคลิกที่นี่


3

จากคำตอบของbillyonecanคุณสามารถใช้รหัสต่อไปนี้หากคุณต้องการข้อมูลโค้ดสำหรับช่องทำเครื่องหมายมากกว่าหนึ่งช่อง (สมมติว่ามีชื่อต่างกัน)

    $('input.one').on('change', function() {
        var name = $(this).attr('name');
        $('input[name='+name+'].one').not(this).prop('checked', false);
    }); 

3

แม้ว่า JS จะเป็นวิธีที่จะไป แต่ก็สามารถทำได้ด้วย HTML และ CSS เท่านั้น

ที่นี่คุณมีปุ่มตัวเลือกปลอมซึ่งเป็นป้ายกำกับสำหรับปุ่มตัวเลือกที่ซ่อนอยู่จริงๆ การทำเช่นนั้นคุณจะได้รับผลตามที่ต้องการ

<style>
   #uncheck>input { display: none }
   input:checked + label { display: none }
   input:not(:checked) + label + label{ display: none } 
</style>

<div id='uncheck'>
  <input type="radio" name='food' id="box1" /> 
  Pizza 
    <label for='box1'>&#9678;</label> 
    <label for='box0'>&#9673;</label>
  <input type="radio" name='food' id="box2" /> 
  Ice cream 
    <label for='box2'>&#9678;</label> 
    <label for='box0'>&#9673;</label>
  <input type="radio" name='food' id="box0" checked />
</div>

ดูได้ที่นี่: https://jsfiddle.net/tn70yxL8/2/

ตอนนี้ถือว่าคุณต้องการป้ายกำกับที่ไม่สามารถเลือกได้

หากคุณยินดีที่จะรวมป้ายกำกับไว้คุณสามารถหลีกเลี่ยงการใช้ป้ายกำกับ "ยกเลิกการเลือก" ซ้ำได้ในทางเทคนิคโดยการเปลี่ยนข้อความใน CSS โปรดดูที่นี่: https://jsfiddle.net/7tdb6quy/2/


1

ตัวอย่างด้วย AngularJs

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<!DOCTYPE html>
<html>

<head>
  <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js"></script>
  <script>
    angular.module('app', []).controller('appc', ['$scope',
      function($scope) {
        $scope.selected = 'other';
      }
    ]);
  </script>
</head>

<body ng-app="app" ng-controller="appc">
  <label>SELECTED: {{selected}}</label>
  <div>
    <input type="checkbox" ng-checked="selected=='male'" ng-true-value="'male'" ng-model="selected">Male
    <br>
    <input type="checkbox" ng-checked="selected=='female'" ng-true-value="'female'" ng-model="selected">Female
    <br>
    <input type="checkbox" ng-checked="selected=='other'" ng-true-value="'other'" ng-model="selected">Other
  </div>



</body>

</html>


1

ด้วยจาวาสคริปต์เก่าธรรมดา

<html>
<head>
</head>
<body>
<input type="checkbox" name="group1[]" id="groupname1" onClick="toggle(1,'groupname')"/>
<input type="checkbox" name="group1[]" id="groupname2" onClick="toggle(2,'groupname')"  />
<input type="checkbox" name="group1[]" id="groupname3" onClick="toggle(3,'groupname')" />

<input type="checkbox" name="group2[]" id="diffGroupname1" onClick="toggle(1,'diffGroupname')"/>
<input type="checkbox" name="group2[]" id="diffGroupname2" onClick="toggle(2,'diffGroupname')"  />
<input type="checkbox" name="group2[]" id="diffGroupname3" onClick="toggle(3,'diffGroupname')" />
<script>
function toggle(which,group){
var counter=1;
var checkbox=document.getElementById(group+counter);
while(checkbox){
if(counter==which){

}else{
checkbox.checked=false;
}
counter++;
checkbox=document.getElementById(group+counter);
}
}
</script>
</body>
</html>

แก้ไข: เป็นไปได้

<html>
<head>
</head>
<body>
<input type="checkbox" name="group1[]" class="groupname" onClick="toggle(this,'groupname')"/>
<input type="checkbox" name="group1[]" class="groupname" onClick="toggle(this,'groupname')"  />
<input type="checkbox" name="group1[]" class="groupname" onClick="toggle(this,'groupname')" />

<input type="checkbox" name="group2[]" class="diffGroupname" onClick="toggle(this,'diffGroupname')"/>
<input type="checkbox" name="group2[]" class="diffGroupname" onClick="toggle(this,'diffGroupname')"  />
<input type="checkbox" name="group2[]" class="diffGroupname" onClick="toggle(this,'diffGroupname')" />
<script>
function toggle(which,theClass){
var checkbox=document.getElementsByClassName(theClass);
for(var i=0;i<checkbox.length;i++){
if(checkbox[i]==which){

}else{
checkbox[i].checked=false;
}
}
}
</script>
</body>
</html>

0

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<!DOCTYPE html>
<html>

<head>
  <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js"></script>
  <script>
    angular.module('app', []).controller('appc', ['$scope',
      function($scope) {
        $scope.selected = 'male';
      }
    ]);
  </script>
</head>

<body ng-app="app" ng-controller="appc">
  <label>SELECTED: {{selected}}</label>
  <div>
    <input type="checkbox" ng-checked="selected=='male'" ng-true-value="'male'" ng-model="selected">Male
    <br>
    <input type="checkbox" ng-checked="selected=='female'" ng-true-value="'female'" ng-model="selected">Female
    <br>
    <input type="checkbox" ng-checked="selected=='other'" ng-true-value="'other'" ng-model="selected">Other
  </div>
</body>
</html>


0

หากมีคนต้องการโซลูชันที่ไม่มีไลบรารี javascript ภายนอกคุณสามารถใช้ตัวอย่างนี้ได้ กลุ่มของช่องทำเครื่องหมายที่อนุญาตให้มีค่า 0..1 คุณสามารถคลิกที่ส่วนประกอบช่องทำเครื่องหมายหรือข้อความป้ายกำกับที่เกี่ยวข้อง

    <input id="mygroup1" name="mygroup" type="checkbox" value="1" onclick="toggleRadioCheckbox(this)" /> <label for="mygroup1">Yes</label>
    <input id="mygroup0" name="mygroup" type="checkbox" value="0" onclick="toggleRadioCheckbox(this)" /> <label for="mygroup0">No</label>

- - - - - - - - 

    function toggleRadioCheckbox(sender) {
        // RadioCheckbox: 0..1 enabled in a group 
        if (!sender.checked) return;
        var fields = document.getElementsByName(sender.name);
        for(var idx=0; idx<fields.length; idx++) {
            var field = fields[idx];
            if (field.checked && field!=sender)
                field.checked=false;
        }
    }

0

เวอร์ชันของฉัน: ใช้ data attributes และ Vanilla JavaScript

<div class="test-checkbox">
    Group One: <label>
        <input type="checkbox" data-limit="only-one-in-a-group" name="groupOne" value="Eat" />Eat</label>
    <label>
        <input type="checkbox" data-limit="only-one-in-a-group" name="groupOne" value="Sleep" />Sleep</label>
    <label>
        <input type="checkbox" data-limit="only-one-in-a-group" name="groupOne" value="Play" />Play</label>
    <br />
    Group Two: <label>
        <input type="checkbox" data-limit="only-one-in-a-group" name="groupTwo" value="Fat" />Fat</label>
    <label>
        <input type="checkbox" data-limit="only-one-in-a-group" name="groupTwo" value="Comfort" />Comfort</label>
    <label>
        <input type="checkbox" data-limit="only-one-in-a-group" name="groupTwo" value="Happy" />Happy</label>
</div>
<script>
    let cbxes = document.querySelectorAll('input[type="checkbox"][data-limit="only-one-in-a-group"]');
    [...cbxes].forEach((cbx) => {
        cbx.addEventListener('change', (e) => {
            if (e.target.checked)
                uncheckOthers(e.target);
        });
    });
    function uncheckOthers (clicked) {
        let name = clicked.getAttribute('name');
        // find others in same group, uncheck them
        [...cbxes].forEach((other) => {
            if (other != clicked && other.getAttribute('name') == name)
                other.checked = false;
        });
    }
</script>

-1

Necromancing:
และหากไม่มี jQuery สำหรับโครงสร้างช่องทำเครื่องหมายเช่นนี้:

<label>
<input type="checkbox" id="mytrackers_1" name="blubb_1" value="">--- Bitte ausw&#228;hlen ---
</label>
<label>
<input type="checkbox" id="mytrackers_2" name="blubb_2" value="7">Testtracker
</label>
<label>
<input type="checkbox" id="mytrackers_3" name="blubb_3" value="3">Kundenanfrage
</label>
<label>
<input type="checkbox" id="mytrackers_4" name="blubb_4" value="2">Anpassung
</label>
<label>
<input type="checkbox" id="mytrackers_5" name="blubb_5" value="1" checked="checked" >Fehler
</label>
<label>
<input type="checkbox" id="mytrackers_6" name="blubb_6" value="4">Bedienung
</label>
<label>
<input type="checkbox" id="mytrackers_7" name="blubb_7" value="5">Internes
</label>
<label>
<input type="checkbox" id="mytrackers_8" name="blubb_8" value="6">&#196;nderungswunsch
</label>

คุณจะทำเช่นนี้:

    /// attach an event handler, now or in the future, 
    /// for all elements which match childselector,
    /// within the child tree of the element maching parentSelector.
    function subscribeEvent(parentSelector, eventName, childSelector, eventCallback) {
        if (parentSelector == null)
            throw new ReferenceError("Parameter parentSelector is NULL");
        if (childSelector == null)
            throw new ReferenceError("Parameter childSelector is NULL");
        // nodeToObserve: the node that will be observed for mutations
        var nodeToObserve = parentSelector;
        if (typeof (parentSelector) === 'string')
            nodeToObserve = document.querySelector(parentSelector);
        var eligibleChildren = nodeToObserve.querySelectorAll(childSelector);
        for (var i = 0; i < eligibleChildren.length; ++i) {
            eligibleChildren[i].addEventListener(eventName, eventCallback, false);
        } // Next i 
        // /programming/2712136/how-do-i-make-this-loop-all-children-recursively
        function allDescendants(node) {
            if (node == null)
                return;
            for (var i = 0; i < node.childNodes.length; i++) {
                var child = node.childNodes[i];
                allDescendants(child);
            } // Next i 
            // IE 11 Polyfill 
            if (!Element.prototype.matches)
                Element.prototype.matches = Element.prototype.msMatchesSelector;
            if (node.matches) {
                if (node.matches(childSelector)) {
                    // console.log("match");
                    node.addEventListener(eventName, eventCallback, false);
                } // End if ((<Element>node).matches(childSelector))
                // else console.log("no match");
            } // End if ((<Element>node).matches) 
            // else console.log("no matchfunction");
        } // End Function allDescendants 
        // Callback function to execute when mutations are observed
        var callback = function (mutationsList, observer) {
            for (var _i = 0, mutationsList_1 = mutationsList; _i < mutationsList_1.length; _i++) {
                var mutation = mutationsList_1[_i];
                // console.log("mutation.type", mutation.type);
                // console.log("mutation", mutation);
                if (mutation.type == 'childList') {
                    for (var i = 0; i < mutation.addedNodes.length; ++i) {
                        var thisNode = mutation.addedNodes[i];
                        allDescendants(thisNode);
                    } // Next i 
                } // End if (mutation.type == 'childList') 
                // else if (mutation.type == 'attributes') { console.log('The ' + mutation.attributeName + ' attribute was modified.');
            } // Next mutation 
        }; // End Function callback 
        // Options for the observer (which mutations to observe)
        var config = { attributes: false, childList: true, subtree: true };
        // Create an observer instance linked to the callback function
        var observer = new MutationObserver(callback);
        // Start observing the target node for configured mutations
        observer.observe(nodeToObserve, config);
    } // End Function subscribeEvent 


    function radioCheckbox_onClick() 
    { 
        // console.log("click", this);
        let box = this;
        if (box.checked) 
        {
            let name = box.getAttribute("name");
            let pos = name.lastIndexOf("_");
            if (pos !== -1) name = name.substr(0, pos);

            let group = 'input[type="checkbox"][name^="' + name + '"]';
            // console.log(group);
            let eles = document.querySelectorAll(group);
            // console.log(eles);
            for (let j = 0; j < eles.length; ++j) 
            {
                eles[j].checked = false;
            }
            box.checked = true;
        }
        else
            box.checked = false;
    }


    // /programming/9709209/html-select-only-one-checkbox-in-a-group
    function radioCheckbox()
    { 
        // on instead of document...
        let elements = document.querySelectorAll('input[type="checkbox"]')

        for (let i = 0; i < elements.length; ++i)
        {
            // console.log(elements[i]);
            elements[i].addEventListener("click", radioCheckbox_onClick, false);

        } // Next i 

    } // End Function radioCheckbox 


    function onDomReady()
    {
        console.log("dom ready");
        subscribeEvent(document, "click", 
            'input[type="checkbox"]', 
            radioCheckbox_onClick
        ); 

        // radioCheckbox();
    }

    if (document.addEventListener) document.addEventListener("DOMContentLoaded", onDomReady, false);
    else if (document.attachEvent) document.attachEvent("onreadystatechange", onDomReady);
    else window.onload = onDomReady;

    function onPageLoaded() {
        console.log("page loaded");
    }

    if (window.addEventListener) window.addEventListener("load", onPageLoaded, false);
    else if (window.attachEvent) window.attachEvent("onload", onPageLoaded);
    else window.onload = onPageLoaded;

-1
//Here is a solution using JQuery    
<input type = "checkbox" class="a"/>one
    <input type = "checkbox" class="a"/>two
    <input type = "checkbox" class="a"/>three
    <script>
       $('.a').on('change', function() {
            $('.a').not(this).prop('checked',false);
    });
    </script>
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.