使用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@Harrytoggle()
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”对于非初学者程序员来说是“不透明”或“不可读”,那么它们可能永远不会接近任何性能或安全关键代码。