简体   繁体   English

当我检查另一个复选框时取消选中复选框

[英]Uncheck checkbox when I check another one

Hey I have two issues with this following code.嘿,下面的代码有两个问题。

First of all when I check the checkbox number 3 it automatically checks number 2, I only want that if I check it my self (Like when I check checkbox number 2).首先,当我检查第 3 号复选框时,它会自动检查第 2 号,我只希望我自己检查它(就像我检查第 2 号复选框时一样)。 The second issue is I can't uncheck a checkbox after checking it.第二个问题是我无法在选中复选框后取消选中它。

 var cbs = document.getElementsByName("test"); function demo(obj) { var hzp = cbs[1]; var ht = cbs[2]; for (var i = 0; i < cbs.length; i++) { if(cbs[i].value == hzp.value || cbs[i].value === ht.value) { if(cbs[i].value == obj.value) { if(cbs[i].checked && hzp.checked || ht.checked) { hzp.checked = true; ht.checked = true; } } } cbs[i].checked = false; } obj.checked = true; }
 checkbox 1 <input type="checkbox" name="test" id="demo1" value="demo01" onClick="demo(this)"> checkbox 2 <input type="checkbox" name="test" id="demo2" value="demo02" onClick="demo(this)"> checkbox 3 <input type="checkbox" name="test" id="demo3" value="demo03" onClick="demo(this)"> checkbox 4 <input type="checkbox" name="test" id="demo" value="demo04" onClick="demo(this)">

e.target.value==cbs[0].value ? 

if clicked input has value of demo01如果单击输入的值为 demo01

cbs[3].checked=false 

set demo04 checked to false将 demo04 设置为 false

: e.target.value==cbs[3].value 

else if clicked input has value of demo04否则,如果单击输入的值为 demo04

? cbs[0].checked=false 

set demo01 checked to false将 demo01 设置为 false

: null

else, nothing...别的,什么都没有……

 var cbs = document.getElementsByName("test") cbs.forEach( test => {test.addEventListener("change", (e) => { e.target.value==cbs[0].value? cbs[3].checked=false: e.target.value==cbs[3].value? cbs[0].checked=false: null }) })
 checkbox 1 <input type="checkbox" name="test" id="demo1" value="demo01" > checkbox 2 <input type="checkbox" name="test" id="demo2" value="demo02"> checkbox 3 <input type="checkbox" name="test" id="demo3" value="demo03"> checkbox 4 <input type="checkbox" name="test" id="demo" value="demo04">

Look closely - this is not jQuery.仔细看——这不是 jQuery。

This gets your bigger job simplified - that of making the checkboxes work like radio buttons.这简化了您更大的工作 - 使复选框像单选按钮一样工作。 Now, you should be able to quite easily add logic to make it do the rest of what you want.现在,您应该能够很容易地添加逻辑以使其执行您想要的 rest。

The basic idea is to:基本思想是:

a.一个。 Trap when any checkbox is clicked单击任何复选框时捕获
b.湾。 Store the checked checkbox value存储选中的复选框值
c. c。 Cache the checkbox itself (so we can turn it back on)缓存复选框本身(这样我们就可以重新打开它)
d. d。 Uncheck ALL checkboxes取消选中所有复选框
e. e. Re-check the one the user just checked.重新检查用户刚刚检查的那个。
f. F。 Update div / variable with the stored value用存储的值更新 div / 变量

Now, just add some additional (eg storedVal) variables to keep track of additional checkboxes.现在,只需添加一些额外的(例如,storedVal)变量来跟踪额外的复选框。

 const $ = document.querySelector.bind(document); const $$ = document.querySelectorAll.bind(document); var storedVal = ''; $$('input').forEach((el) => { el.addEventListener('click', function(e){ storedVal = e.target.value; let ckcb = e.target; uncheckAll(); ckcb.checked = true; console.log(storedVal); $('#msg').innerText = storedVal; }); }); const uncheckAll = () => { $$('input').forEach((el) => { el.checked = false; }); }
 #msg{ position:absolute; top:70px; right:30px; font-size:2rem; padding:10px; background:wheat; }
 checkbox 1 <input type="checkbox" name="test" id="demo1" value="demo01"> checkbox 2 <input type="checkbox" name="test" id="demo2" value="demo02"> checkbox 3 <input type="checkbox" name="test" id="demo3" value="demo03"> checkbox 4 <input type="checkbox" name="test" id="demo" value="demo04"> <div id="msg"></div>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM