javascript - ASP.NET WebForms 使用 jQuery v1.9.0 检查 GridView 中的所有复选框不起作用

标签 javascript jquery asp.net gridview checkbox

我的应用程序有一个关于 jQuery 的问题。我尝试了一个代码示例 ( https://web.archive.org/web/20210513220745/http://aspnet.4guysfromrolla.com/articles/120810-1.aspx ) 使用 Header CheckBox 来选中/取消选中 GridView 中的所有行。示例代码适用于 jQuery v1.4.4,但不适用于最新的 jQuery 版本 v1.9.0。

这是代码。

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

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

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

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

            ToggleCheckUncheckAllOptionAsNeeded();
        });

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

        ToggleCheckUncheckAllOptionAsNeeded();
    });
</script>

使用 jQuery v1.4.4 一切都很完美。在每次加载页面时使用 jQuery v1.9.0,我都会收到“对象不支持此属性或方法:.live”错误。如果我使用语法:

$(allCheckBoxSelector).click(function () {...

而不是上面的错误,我避免了错误,但 Header Checkbox 只工作一次。如果我再次单击它,则没有任何反应。

我还尝试了 .on 语法:

$(allCheckBoxSelector).on('click', function () {...

但它也不起作用。

我想知道这个问题是由于 jQuery v1.9.0 中的更改还是错误引起的。

最佳答案

jQuery live 现在应该被 on 取代。如果代码之前有效,它应该在您更改后有效。

我找到了问题的根源:必须使用 .prop 而不是 .attr。我也对代码做了一些小的修改。

这是 JS Bin 上的工作演示:http://jsbin.com/egopar/4/edit

这是 jQuery 1.9 的工作代码:

 $(document).ready(function () {

    var allCheckBoxSelector = $('#chkAll');

    var checkBoxSelector = $('input:checkbox:not(#chkAll)');

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

        //console.log(allCheckboxesAreChecked);

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

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

        ToggleCheckUncheckAllOptionAsNeeded();
    });

    $(checkBoxSelector).on('click', function () {
        ToggleCheckUncheckAllOptionAsNeeded();
    });
});

关于javascript - ASP.NET WebForms 使用 jQuery v1.9.0 检查 GridView 中的所有复选框不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14483514/

相关文章:

javascript - 在 PyCharm 中禁用 React Prop 的自动 {} 插入

javascript - 水平滚动 Canvas

javascript - Dropzone 在 init 函数上添加 id 并排序

php - 如何从末尾截断文件名并限制

c# - 使用 iTextSharp 生成 PDF

javascript - 如何使 Google Diff Match Patch 更喜欢字符串末尾的更改?

javascript - 表 th(相对)内的 CSS div(绝对),div 被隐藏

javascript - 如何将多个函数结果绑定(bind)为选项以在表单选择弹出框中进行选择?

c# - 在 c# 的 gridview 编辑模式下填充下拉列表的问题

c# - 如何将 JSON 对象转换为特定格式