javascript - 防止复选框同时被选中和禁用
javascript - prevent checkboxes from becoming both checked AND disabled
我有一个程序,其中 javascript 更改了几个复选框,根据选中的其他复选框将它们设置为禁用、选中或取消选中。我注意到,如果您有一个选中的复选框然后将其禁用,则可以同时选中和禁用它。我不希望这成为可能。我希望任何已禁用的复选框也未选中。我一直在寻找一种简单的方法来做到这一点。我认为 queryselectorall 会起作用。这是一个简化的例子。在此示例中,我默认选中并禁用其中一个框。如果您单击另一个框,它应该摆脱禁用框中的检查。我以为这个简单的函数可以做到这一点,但它不起作用。
function fixit() {
document.querySelectorAll('input[type="checkbox"]:checked:disabled').checked=0;
}
<form id='theform' name='mainform' method='post' action='#'>
box1<input onClick='fixit()' type='checkbox' disabled checked>
box2<input onClick='fixit()' type='checkbox'>
box3<input onClick='fixit()' type='checkbox'>
</form>
您可以使用 HTML DOM removeAttribute() 方法。
function fixit() {
var i, cb = document.querySelectorAll('input[type="checkbox"]:checked:disabled');
for (i = 0; i < cb.length; i++) {
cb[i].removeAttribute("checked");
}
}
<form id='theform' name='mainform' method='post' action='#'>
box1
<input onClick='fixit()' type='checkbox' disabled checked>box2
<input onClick='fixit()' type='checkbox'>box3
<input onClick='fixit()' type='checkbox'>
</form>
编辑:我忘记遍历返回的复选框数组。
querySelectorAll
returns 一个没有 属性 checked
的元素列表。您需要遍历元素列表并应用您的更改。
function fixit() {
var cbs = document.querySelectorAll('input[type="checkbox"]:checked:disabled');
for(var i = 0;i<cbs.length;i++){
cbs[i].checked = 0;
}
}
<form id='theform' name='mainform' method='post' action='#'>
box1<input onClick='fixit()' type='checkbox' disabled checked>
box2<input onClick='fixit()' type='checkbox'>
box3<input onClick='fixit()' type='checkbox'>
</form>
function fixit() {
document.querySelectorAll('input[type="checkbox"]:checked:disabled').forEach(function(x) {
x.checked = 0;
});
}
<form id='theform' name='mainform' method='post' action='#'>
box1<input onClick='fixit()' type='checkbox' disabled checked>
box2<input onClick='fixit()' type='checkbox'>
box3<input onClick='fixit()' type='checkbox'>
</form>
首先使用外部 JavaScript,将 <script type='text/javascript' src='external.js'></script>
放入您的 <head>
external.js
var pre = onload, doc, bod, htm, E, fixIt;
onload = function(){
if(pre)pre();
doc = document, bod = doc.body;
E = function(id){
return doc.getElementById(id);
}
fixIt = function(formElement){
var es = formElement.elements;
for(var i=0,e,l=es.length; i<l; i++){
e = es[i];
if(e.disabled && e.checked){
e.checked = false;
}
}
}
fixIt(E('theform')); // use whenever
}
我有一个程序,其中 javascript 更改了几个复选框,根据选中的其他复选框将它们设置为禁用、选中或取消选中。我注意到,如果您有一个选中的复选框然后将其禁用,则可以同时选中和禁用它。我不希望这成为可能。我希望任何已禁用的复选框也未选中。我一直在寻找一种简单的方法来做到这一点。我认为 queryselectorall 会起作用。这是一个简化的例子。在此示例中,我默认选中并禁用其中一个框。如果您单击另一个框,它应该摆脱禁用框中的检查。我以为这个简单的函数可以做到这一点,但它不起作用。
function fixit() {
document.querySelectorAll('input[type="checkbox"]:checked:disabled').checked=0;
}
<form id='theform' name='mainform' method='post' action='#'>
box1<input onClick='fixit()' type='checkbox' disabled checked>
box2<input onClick='fixit()' type='checkbox'>
box3<input onClick='fixit()' type='checkbox'>
</form>
您可以使用 HTML DOM removeAttribute() 方法。
function fixit() {
var i, cb = document.querySelectorAll('input[type="checkbox"]:checked:disabled');
for (i = 0; i < cb.length; i++) {
cb[i].removeAttribute("checked");
}
}
<form id='theform' name='mainform' method='post' action='#'>
box1
<input onClick='fixit()' type='checkbox' disabled checked>box2
<input onClick='fixit()' type='checkbox'>box3
<input onClick='fixit()' type='checkbox'>
</form>
编辑:我忘记遍历返回的复选框数组。
querySelectorAll
returns 一个没有 属性 checked
的元素列表。您需要遍历元素列表并应用您的更改。
function fixit() {
var cbs = document.querySelectorAll('input[type="checkbox"]:checked:disabled');
for(var i = 0;i<cbs.length;i++){
cbs[i].checked = 0;
}
}
<form id='theform' name='mainform' method='post' action='#'>
box1<input onClick='fixit()' type='checkbox' disabled checked>
box2<input onClick='fixit()' type='checkbox'>
box3<input onClick='fixit()' type='checkbox'>
</form>
function fixit() {
document.querySelectorAll('input[type="checkbox"]:checked:disabled').forEach(function(x) {
x.checked = 0;
});
}
<form id='theform' name='mainform' method='post' action='#'>
box1<input onClick='fixit()' type='checkbox' disabled checked>
box2<input onClick='fixit()' type='checkbox'>
box3<input onClick='fixit()' type='checkbox'>
</form>
首先使用外部 JavaScript,将 <script type='text/javascript' src='external.js'></script>
放入您的 <head>
external.js
var pre = onload, doc, bod, htm, E, fixIt;
onload = function(){
if(pre)pre();
doc = document, bod = doc.body;
E = function(id){
return doc.getElementById(id);
}
fixIt = function(formElement){
var es = formElement.elements;
for(var i=0,e,l=es.length; i<l; i++){
e = es[i];
if(e.disabled && e.checked){
e.checked = false;
}
}
}
fixIt(E('theform')); // use whenever
}