2011-10-04 52 views
0

我正在写一些代码,将允许以下内容:jQuery的检查都没有复选框工作

1)如果用户检查一个复选框,它会改变父<tr>有一类的选择(这可以也被取消选中并删除类)

2.),其已校验过将具有添加上文件负载

3.)类的任何复选框如果用户检查#checkall输入然后所有的输入将成为检查并添加选中的类(如果再次选中,则将取消选择全部并删除类)

这是我的代码至今:

$("table input[name=choose]:checked").each(function() 
    { 
     $(this).closest("tr").addClass("selected"); 
    }); 

    $("table input[name=choose]").live("change", function() 
    { 
     $(this).closest("tr").toggleClass("selected"); 
    }); 

    if ($('#checkall:checked') == true) 
    { 
     $('#checkall').live("click", function() 
     { 
      $('table input[name=choose]').attr('checked', false); 
      $('table input[name=choose]').closest("tr").toggleClass("selected");    
     }); 
    } 
    else 
    { 
     $('#checkall').live("click", function() 
     { 
      $('table input[name=choose]').attr('checked', true); 
      $('table input[name=choose]').closest("tr").toggleClass("selected"); 
     }); 
    } 

前两个工作正常,但3号没有取消选中复选框...任何想法,为什么?但类部分工作正常?

谢谢

回答

0

因为if ($('#checkall:checked') == true)永远是假的..

要么使用

if ($('#checkall').is(':checked')) 

if ($('#checkall:checked').length) 

评论

后更新替换整个第三部分(所有的if/else)与

$('#checkall').live("change", function() 
     { 
      $('table input[name=choose]') 
       .attr('checked', this.checked) 
       .closest("tr") 
       .toggleClass("selected", this.checked);    
     }); 

演示在http://jsfiddle.net/gaby/KqwsZ/1/

+0

仍然不会取消我的复选框,当我再次点击它时... – Cameron

+0

@Cameron,而不是**再次**,确实..你需要它来切换'#checkall'的当前值。更新的答案.. –

+0

@Cameron,你可能不需要'live'..这是用来代替实际的'#checkall'复选框动态地与另一个..只需使用'.change(function(){。 。})'直接。 –

1

我想它一直运行到else块(你有调试过)?

试着写这对于如果复选框被选中检查:

if ($('#checkall').attr('checked')) 
+0

我不认为它到达else语句,因为这种检查发生在页面加载而不是检查后? – Cameron

+0

你必须在'#checkall'复选框的点击处理程序中执行此代码! – Jan