当我们在jquery中使用每个函数时,我们应该添加return false,这是对的吗?

时间:2014-05-25 06:23:41

标签: javascript jquery

我有一个复选框和复选框组。当我单击复选框时,将检查所有复选框组。当我选中所有复选框组时,将检查复选框。我写这些代码,但我的伙伴说添加return false会更好。这是对的?我发现添加return truereturn也很好。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 );
           }
 });

4 个答案:

答案 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。否则,您无需根据提供的代码返回任何内容。

http://api.jquery.com/jquery.each/

答案 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
    );
});

demo