2015-06-26 56 views
1

我注意到我的代碼在jQuery 2.1.4中不起作用。但在jquery 1.4.3中工作。我已經做了一個代碼,通過檢查主複選框來檢查表中的所有複選框。該代碼適用於前2次點擊,但不能從第三次點擊中運行。 當我使用jquery 1.4.3時,代碼正常工作。 jQuery代碼是 -代碼在jQuery 2.1.4中失敗,但在舊版本中運行良好

<script type="text/javascript"> 
    $(document).ready(function() { 
     $("#mainCheckBox").click(function() { 
      if ($(this).is(":checked")) { 
       $("#pageTbody").find('input[type="checkbox"]').each(function() { 
        $(this).attr("checked", true); 
       }); 
      } 
      else { 
       $("#pageTbody").find('input[type="checkbox"]').each(function() { 
        $(this).attr("checked", false); 
       }); 
      } 
     }); 
    }); 
</script> 

有人能給出解決方案失敗的原因在最新的jQuery版本?

+3

使用'$(本).prop( 「選中」,假);' –

+1

相關:http://jquery.com/upgrade-guide/1.9/在[他們的博客](http://blog.jquery.com/)上,每個jQuery發行版都有發佈說明。 –

+0

更改了代碼以使用prop而不是attr,現在我的問題已解決。謝謝。 – yogihosting

回答

4

您需要使用.prop(),而不是.attr()

在jQuery 1.6中,.prop()方法提供了一種明確檢索屬性值,而.attr()檢索屬性。

$(this).prop("checked", true/false); 

現有代碼可以被優化爲

$(document).ready(function() { 
    $("#mainCheckBox").change(function() { 
     $("#pageTbody input[type='checkbox']").prop("checked", this.checked); 
    }); 
}); 
  1. 沒有必要使用.each()
  2. 使用change事件而不是click
1

checked是一個屬性和不是一個屬性,所以你將不得不爲了現在使用.prop得到它的權利:

<script type="text/javascript"> 
    $(document).ready(function() { 
     $("#mainCheckBox").click(function() { 
      if ($(this).is(":checked")) { 
       $("#pageTbody").find('input[type="checkbox"]').each(function() { 
        $(this).prop("checked", true); 
       }); 
      } 
      else { 
       $("#pageTbody").find('input[type="checkbox"]').each(function() { 
        $(this).prop("checked", false); 
       }); 
      } 
     }); 
    }); 
</script> 
1

用這樣的方式:

$(this).prop("checked", true); 
相關問題