asp.NET AJAX 调用,jQuery 不再有效

asp.NET AJAX call, jQuery no longer works

我不想问一个已经有人问过的问题,但是 none 我看过的答案似乎适用于我的问题

我正在使用 Microsoft UpdatePanel 对象更新具有 AJAX 的网格视图。如果我在文档加载时加载 gridview,我的 jQuery 效果很好。我第一次使用 AJAX 更新时,jQuery 不再有效。

通过查看网络博客,我了解到 gridview 对象与页面加载时存在的对象不同,我需要重新熟悉我的 jQuery 新的 DOM 对象(我觉得……对吧……?)。我看过的大多数网站,包括本网站上的帖子,都表明 .on() jQuery 函数可以帮助我,但我不知道如何使用它来解决我的问题。

这是我的 jQuery 函数之一的示例,以防您关心:

    //  Select/deselect all checkboxes on gridview
    $("#chkSelectAll").change(function () {
        var isChecked = $('#chkSelectAll:checked').val() ? true : false;
        if (isChecked == true) {
            $(".c_chkItem input").each(function () {
                $(this).prop('checked', true)
            });
        } else {    
            $(".c_chkItem input").each(function () {
                $(this).prop('checked', false)
            });
        }
    });

我的问题是,当 dot.net 对象更新我的 gridview 时,我如何让我的 jQuery 知道它?

Whosebug 的好心人帮不了我,所以我又折腾了几个小时。这是我的解决方案,以防有同样问题的人访问此页面。

如果您有以下 jQuery 代码:

<script type="text/javascript">

    $(document).ready(function () {
       $('#myControl').val('some value');
    }

</script>

它会在页面首次加载时起作用,但如果 myControl 位于由 ajax 更新的 UpdatePanel 对象中,您的 jQuery 函数将不再与它一起起作用。

为了解决问题,将jQuery移动到document.ready函数之外的单独函数中,并使用以下代码:

<script type="text/javascript">

    $(document).ready(function () {
        // Whatever
    }

    function pageLoad(sender, args) {
        if (args.get_isPartialLoad()) {
           $('#myControl').val('some value');
        }
    }

</script>

现在,每次 ajax 部分重新加载您的页面时,myControl 都会响应您的 jQuery。

另外一件事,如果您有一个网络表单控件需要在第一个 ajax 调用之前查看 jQuery,您可能还需要将 jQuery 语句放入document.ready 函数,以便它在页面首次加载时触发,并在每次 ajax 调用后再次触发。我不需要这样做,我也没有测试过,但我猜这是正确的。