2013-07-09 28 views
1

我正在使用.attr() jQuery函數來檢查和取消選中複選框。它第一次工作,但是現在不再有了。如何使用jquery檢查和取消選中複選框元素?

在閱讀了幾個關於它的問題之後,我無法完成這項工作。例如thisthisthis

我在Chrome和Firefox上測試了它。我使用jsFiddle也遇到同樣的問題。

問題在哪裏?在JavaScript代碼上,在HTML中還是在哪裏?

這是所有代碼:

<!DOCTYPE html> 
<html lang="en" dir="ltr"> 
<head> 
    <meta charset="utf-8"> 
    <title>Searchs</title> 
</head> 
<body> 
    <div id="results-body"> 
     <table> 
      <thead> 
       <tr> 
        <td class="small center"> 
         <input type="checkbox" id="checkall" onclick="master();" /> 
        </td> 
       </tr> 
      </thead> 
      <tbody> 
       <tr> 
        <td class="center"> 
         <input type="checkbox" class="slave" onclick="slave();" /> 
        </td> 
       </tr><tr> 
        <td class="center"> 
         <input type="checkbox" class="slave" onclick="slave();" /> 
        </td> 
       </tr> 
      </tbody> 
     </table> 
    </div> 

    <!-- LOAD THE JS AT THE END OF THE FILE --> 
    <script src="http://code.jquery.com/jquery-latest.min.js"></script> 
    <script> 
     $(document).ready(function(){ 
      master = function() { 
       if ($('#checkall:checkbox').is(":checked")) 
        $('input:checkbox').attr('checked',true); 
       else 
        $('input:checkbox').attr('checked',false); 
      } 
      slave = function() { 
       var allSelected = true; 
       $('.slave[type="checkbox"]').each(function() { 
        if ($(this).is(":not(:checked)")){ 
         allSelected = false; 
         //return; 
        } 
       }); 
       if (!allSelected) { 
        //$('#checkall:checkbox').removeAttr('checked'); 
        alert("REMOVE: \nFrom " + $('#checkall:checkbox').attr('checked')); 
        $('#checkall:checkbox').attr('checked',false); 
        alert("to " + $('#checkall:checkbox').attr('checked')); 

       } else { 
        alert("ADD: \nFrom " + $('#checkall:checkbox').attr('checked')); 
        $('#checkall:checkbox').attr('checked',true); 
        alert("to " + $('#checkall:checkbox').attr('checked')); 
       } 
      } 
     }); 
    </script> 
</body> 
</html> 
+2

用'.prop'換掉'.attr' – adeneo

+0

@adeneo工作正常。請創建一個新的答案,以便我可以將其標記爲已接受 – Lucio

回答

4

你應該像checked設置屬性時,可使用.prop(),所以更改:

.attr('checked', true) 

.prop('checked', true) 

和類似的東西:

$('#checkall:checkbox').attr('checked') 

有:

$('#checkall:checkbox').is(':checked') 
3

更改所有.attr().prop()

jsFiddle example

作爲docs說(以1.9開始):

檢索和更改DOM性質如被檢查的,所選擇的, 或形式的元件的禁用狀態下,使用.prop()方法。

+0

這就是之前爲我工作的方式,因爲我使用了'1.8'版本,但現在它從'1.9'版本開始不起作用。十分有趣 – Lucio

相關問題