简体   繁体   English

如何使未选中的复选框变灰?

[英]How to grey out checkboxes that aren't checked?

I have unordered lists of checkbox input.Once an input is checked I want the rest to be greyed out with the option of checking another input that will also be highlighted.我有复选框输入的无序列表。一旦检查了一个输入,我希望其余的都变灰,并选择检查另一个也将突出显示的输入。

instead of toggling disabled, add/remove class grey而不是切换禁用,添加/删除类灰色

The JS in my snippet is the closest related example I could find but this doesn't suit my purpose as it disables checkboxes I just want them grey我的代码段中的 JS 是我能找到的最接近的相关示例,但这不适合我的目的,因为它禁用了复选框,我只希望它们变灰

 function ckChange(ckType){ var ckName = document.getElementsByName(ckType.name); var checked = document.getElementById(ckType.id); if (checked.checked) { for(var i=0; i < ckName.length; i++){ if(!ckName[i].checked){ ckName[i].disabled = true; }else{ ckName[i].disabled = false; } } } else { for(var i=0; i < ckName.length; i++){ ckName[i].disabled = false; } } }
 input { opacity: 1; } input.grey { opacity: 0.5; }
 <ul> <li> <td><input type="checkbox" name="progress" id="progress1" value="1" tabIndex="1" onClick="ckChange(this)">Test 1 </li> <li> <input type="checkbox" name="progress" id="progress2" value="1" tabIndex="1" onClick="ckChange(this)">Test 2 </li> <li> <input type="checkbox" name="progress" id="progress3" value="1" tabIndex="1" onClick="ckChange(this)">Test 3 </li> <li> <input type="checkbox" name="progress" id="progress4" value="1" tabIndex="1" onClick="ckChange(this)">Test 4 </li> <ul>

You coule use add/remove class instead off set disabled您可以使用add/remove类而不是禁用设置

Moreover, on uncheck, check if all is currently unchecked, if that, remove grey for all, else add grey for the checked此外,在取消选中时,检查所有当前是否未选中,如果是,则为所有删除灰色,否则为选中的添加灰色

 function onChecked(ckName) { for (var i = 0; i < ckName.length; i++) { if (!ckName[i].checked) { ckName[i].classList.add('grey') } else { ckName[i].classList.remove('grey') } } } function onUnchecked(ckName) { const allUnchecked = [...ckName].every(el => !el.checked) if (allUnchecked) { for (var i = 0; i < ckName.length; i++) { ckName[i].classList.remove('grey') } } else { for (var i = 0; i < ckName.length; i++) { if (!ckName[i].checked) { ckName[i].classList.add('grey') } } } } function ckChange(ckType) { var ckName = document.getElementsByName(ckType.name); var checked = document.getElementById(ckType.id); if (checked.checked) { onChecked(ckName) } else { onUnchecked(ckName) } }
 input { opacity: 1; } input.grey { opacity: 0.3; }
 <ul> <li> <td><input type="checkbox" name="progress" id="progress1" value="1" tabIndex="1" onClick="ckChange(this)">Test 1 </li> <li> <input type="checkbox" name="progress" id="progress2" value="1" tabIndex="1" onClick="ckChange(this)">Test 2 </li> <li> <input type="checkbox" name="progress" id="progress3" value="1" tabIndex="1" onClick="ckChange(this)">Test 3 </li> <li> <input type="checkbox" name="progress" id="progress4" value="1" tabIndex="1" onClick="ckChange(this)">Test 4 </li> <ul>

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

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