检查所有复选框的jquery前向兼容性问题

时间:2013-02-22 15:34:39

标签: jquery asp.net

我有一个使用jquery的js函数,可以正常使用1.8.3.js,但是当我更新到1.9.1.js时它会退出。在这一点上我真的对jquery一无所知(它就在要研究的东西列表中,很快就会出现),所以我真的无法分辨出问题所在的位置。这是代码:

<script type="text/javascript">
  var allCheckBoxSelector = '#<%=GridView1.ClientID%> 
         input[id*="chkAll"]:checkbox';
  var checkBoxSelector = '#<%=GridView1.ClientID%> 
         input[id*="chkSelected"]:checkbox';

  function ToggleCheckUncheckAllOptionAsNeeded()
  {
    var totalCheckboxes = $(checkBoxSelector),
           checkedCheckboxes = totalCheckboxes.filter(":checked"),
           noCheckboxesAreChecked = (checkedCheckboxes.length === 0),
           allCheckboxesAreChecked = (totalCheckboxes.length ===
           checkedCheckboxes.length);

     $(allCheckBoxSelector).prop('checked', allCheckboxesAreChecked);
    }

    $(document).ready(function ()
    {
      $(allCheckBoxSelector).live('click', function ()
      {
        $(checkBoxSelector).prop('checked', $(this).is(':checked'));

        ToggleCheckUncheckAllOptionAsNeeded();
      });

      $(checkBoxSelector).live('click', ToggleCheckUncheckAllOptionAsNeeded);

      ToggleCheckUncheckAllOptionAsNeeded();
  });
</script>

有关此问题的任何建议吗?同样,当引用1.8.3.js时,它工作得很好,但是当使用1.9.1.js检查时,“check all”框没有任何效果。

3 个答案:

答案 0 :(得分:2)

jQuery 1.7中不推荐使用.live()函数,最后在jQuery 1.9中完全删除了它。您的代码不再有效,因为您正在尝试调用不再存在的函数。代替.live(),使用.on()的委托事件语法。所以改变这个:

$(allCheckBoxSelector).live('click', function () {
    $(checkBoxSelector).attr('checked', $(this).is(':checked'));
    ToggleCheckUncheckAllOptionAsNeeded();
});

$(checkBoxSelector).live('click', ToggleCheckUncheckAllOptionAsNeeded);

到此:

$(document).on('click', allCheckBoxSelector, function () {
    $(checkBoxSelector).prop('checked', $(this).is(':checked'));
    ToggleCheckUncheckAllOptionAsNeeded();
});

$(document).on('click', checkBoxSelector, ToggleCheckUncheckAllOptionAsNeeded);

有关将.live()转换为.on()的其他详细信息,请参阅API doc for .live()

答案 1 :(得分:2)

.live已在1.9

中删除

尝试更换:

$(checkBoxSelector).live('click', ToggleCheckUncheckAllOptionAsNeeded);

$(document).on('click',checkBoxSelector, ToggleCheckUncheckAllOptionAsNeeded);

答案 2 :(得分:1)

使用.prop而不是.attr作为复选框。

$(checkBoxSelector).prop('checked', $(this).is(':checked'));