1

我有一个使用 1.8.3.js 的 jquery 的 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 时,选中“全选”框没有任何效果。

4

3 回答 3

2

.live()函数在 jQuery 1.7 中被弃用,最终在 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 文档.live()

于 2013-02-22T15:41:22.427 回答
2

.live 已在 1.9 中删除

尝试更换:

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

$(document).on('click',checkBoxSelector, ToggleCheckUncheckAllOptionAsNeeded);
于 2013-02-22T15:42:05.970 回答
1

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

$(checkBoxSelector).prop('checked', $(this).is(':checked'));
于 2013-02-22T15:37:53.653 回答