使用JavaScript切换复选框

使用JavaScript切换复选框,javascript,html,if-statement,Javascript,Html,If Statement,我有这个工作,但我没有保存,无法复制。我正在尝试使用if-else切换复选框。我做错了什么 我认为有效的方法是: function myForm() { var inputs = document.getElementsByTagName("input"); for(var i = 0; i < inputs.length; i++) { if(inputs[i].type == "checkbox") { if(inputs[i]

我有这个工作,但我没有保存,无法复制。我正在尝试使用
if-else
切换复选框。我做错了什么

我认为有效的方法是:

function myForm() {
    var inputs = document.getElementsByTagName("input");
    for(var i = 0; i < inputs.length; i++) {
        if(inputs[i].type == "checkbox") { 
            if(inputs[i].checked = false) {
                inputs[i].checked = true; 
            } else {
                if(inputs[i].checked = true) {
                    inputs[i].checked = false; 
                }   
            }
        }  
    } 
}
函数myForm(){
var inputs=document.getElementsByTagName(“输入”);
对于(变量i=0;i
单等号表示赋值,双等号/三等号表示相等。您需要在if/else块中使用double或triple equals

    if(inputs[i].checked == false) {
        inputs[i].checked = true; 
    }
    else {
        if(inputs[i].checked == true) {
            inputs[i].checked = false; 
         }   
    }
这可能更容易:

inputs[i].checked = !inputs[i].checked;

如何使用一个操作符,它被定义为使用1作为第二个操作数来切换布尔值

inputs[i].checked ^= 1;
这使用了,它切换布尔值,因为≡ A^1

它也不需要第二次查找
输入[i]

2020年更新: 您还可以通过使用函数在复选框上迭代,消除
for
循环和所有那些
var
s,将函数体缩减为:

document.querySelectorAll('input[type="checkbox"]').forEach(e => e.checked ^= 1);

另一个正确答案可能是:

inputs[i].checked = input.checked ? false : true;

我想我会补充这一点,因为它让我找到了一个答案,我想用bookmarklet检查所有复选框。在IE 11和Chrome中,使用按位运算符非常有魅力。没有在其他浏览器中尝试过

javascript:(function(){var chbxs=document.querySelectorAll('input');for(i in chbxs){chbxs[i].checked^=1;}})();

为什么不使用toggle()?输入[i]可能重复。选中=!输入[i]。已检查更简单。标签名不应该是
“input”
?@Harry谢谢,我会看看的function@Harry
toggle()
jQuery正确吗?始终使用
==
/
是一个很好的做法==而不是
==
/
=Boolean
进行比较时,或者仅在需要时手动执行类型强制。事实上,else语句中的if语句完全没有必要。只需执行
输入[i].checked=false在else中。@Farside在这种情况下,他们最好使用
=
来保存字节,因为
选中的
将始终是一个布尔值。但是,是的,这是一个很好的练习。我在写开场白的时候,实际上正计划使用三重相等……不知道发生了什么。谢谢。我所有的复选框都在切换,除了启动切换的复选框。哇!以前从没见过。运算符^=?
^
是XOR运算符<如果
a
b
的值不同,则code>a^b
为真,否则为假
a^=true
(相当于
a^true
)如果
a
true
true
如果
a
false
,则计算结果为
false
。虽然这种方法“有效”,但我认为这不是一个好主意-在不需要时使用位运算符会导致代码可读性降低,更加不透明,正如你从第一条评论中看到的。这会让人困惑。可读的代码比简洁的代码更重要,除非你在玩代码高尔夫。我不同意。在CS的第一周,XOR被报道的那一天。如果“XOR 1”对于非初学者程序员来说是“不透明”或“不可读”,那么它们可能永远不会接近任何性能或安全关键代码。