我有一个复选框和复选框组。当我单击复选框时,将检查所有复选框组。当我选中所有复选框组时,将检查复选框。我写这些代码,但我的伙伴说添加return false
会更好。这是对的?我发现添加return true
或return
也很好。break
怎么样?
$("#CheckedAll").click(function(){
if(this.checked){
$('input[type=checkbox][name=items]').attr("checked", true );
}else{
$('input[type=checkbox][name=items]').attr("checked", false );
}
});
$('input[type=checkbox][name=items]').click(function(){
var flag=true;
$('input[type=checkbox][name=items]').each(function(){
if(!this.checked){
flag = false;
return false; //return;return true,break;?
}
});
if( flag ){
$('#CheckedAll').attr('checked', true );
}else{
$('#CheckedAll').attr('checked', false );
}
});
答案 0 :(得分:4)
当您使用jQuery each
时 - 如果您想停止循环,则只想返回false
。
return / return true都不会阻止循环迭代。
var a=[1,2,3,4,5];
$.each(a,function (i,n){
if (n==2) return;
console.log(n)
})
结果= 1,3,4,5
$.each(a,function (i,n){
if (n==2) return true;
console.log(n)
})
结果= 1,3,4,5
$.each(a,function (i,n){
if (n==2) return false;
console.log(n)
})
result = 1
$.each(a,function (i,n){
if (n==2) break;
console.log(n)
})
result:Uncaught SyntaxError:Illegal break statement
答案 1 :(得分:2)
"我们可以通过使回调函数返回false来中断特定迭代的$ .each()循环。返回非false与for循环中的continue语句相同;它会立即跳到下一次迭代。"
这取决于你的意图。如果需要停止循环,则返回false。否则,您无需根据提供的代码返回任何内容。
答案 2 :(得分:2)
jQuery不允许" 打破"许多其他编程语言中的关键字。 返回true 都不会让你离开循环。
所以要使用jQuery获取 break 语句的行为,最好返回false。 等效输出。
答案 3 :(得分:2)
你的同事是对的:一旦找到一个选中复选框的实例,继续循环是没有意义的。 return false
阻止每个循环迭代。 break
将不会执行任何操作,因为.each()
不是本机循环并且返回除false之外的其他内容将停止当前迭代但不会停止整个循环。
也就是说,您可以完全避免每个循环并大大简化代码。此外,您需要使用.prop()
代替.attr()
。试试这个:
$("#CheckedAll").click(function () {
$('input[type=checkbox][name=items]').prop("checked", this.checked);
});
$('input[type=checkbox][name=items]').click(function () {
$('#CheckedAll').prop(
'checked',
$('input[type=checkbox][name=items]:not(:checked)').length === 0
);
});