GridView 上的 jQuery 函数在页面回发后停止工作(鼠标悬停,单击)

Posted

技术标签:

【中文标题】GridView 上的 jQuery 函数在页面回发后停止工作(鼠标悬停,单击)【英文标题】:jQuery functions on GridView stop working after PostBack on page (mouseover, click) 【发布时间】:2011-12-26 00:29:07 【问题描述】:

我的所有 jQuery 函数在第一次加载页面时都能正常工作,在我执行回发后,会导致为 GridView 填充行过滤器并根据行过滤器再次绑定网格。我的 GridView 完全由代码构建并呈现为表格。在此 PostBack 之后,鼠标悬停、鼠标悬停和单击我表格中的表格行的功能不再起作用。

我将 jQuery 函数放在 document.ready 函数中。我还注意到在回发之前这被添加到行的 html 中:

<tr jQuery1320916="3">

所以基本上每行末尾都有一个序列 (3) 和一些随机数,前面有 jQuery。回发后,这将从行中删除。

这是我的 jQuery 代码的一部分(第一次点击功能在 PostBack 之后仍然有效,但 GridView 上的功能不再有效):

 $(document).ready(function()
        //start click function select all
        $('input[id$="SelectDeselectAllBox"]').click(function()            
        //start if
        if($(this).is(':checked'))
           $(this).parent().parent().parent().parent().children().find('input:checkbox').attr('checked',true).closest('tr').addClass('SelectedRow')
        else
            $(this).parent().parent().parent().parent().children().find('input:checkbox').attr('checked',false).closest('tr').removeClass('SelectedRow');
        //end if

        //end click function select all
             );


        //highligth hovered row
             $('table[id^=taskgrid] tbody tr').mouseover(function () 
                 $(this).addClass('HightlightRow');
             ).mouseout(function () 
                 $(this).removeClass('HightlightRow');
             );            

        //end document ready
        );

我错过了什么吗,在此先感谢。

我确实发现jQuery通过这种方法不再找到我的gridview了:

$('table[id^=taskgrid] tbody tr'),如果我填写 taskgrid 的总 ID,那么它确实有效。但这不是我的选择。

    //is everthing checked? start if
 if($(this).parent().find('input:checkbox:not(:checked)').length == 0)
    $(this).parent().parent().parent().parent().find('input:checkbox:first').attr('checked',true)
    else
    $(this).parent().parent().parent().parent().find('input:checkbox:first').attr('checked',false);
//end if

【问题讨论】:

检查这个问题:***.com/questions/256195/… 我没有在我的解决方案中使用 UpdatePanel,引用该问题的答案:“PageRequestManager 是一个 javascript 对象,如果页面上有更新面板,它将自动可用。” 【参考方案1】:

问题是,您使用的是“开始于”选择器:

$('table[id^=taskgrid] tbody tr')

对于 ASP.NET WebForms 生成的 id,最好使用“结尾”选择器。假设您的 GridView id 是“taskgrid”,请尝试使用以下选择器:

$('table[id$="taskgrid"] tbody tr')

如果您要定位多个表格元素并且“taskgrid”只是 id 的一部分,您可以使用“包含”选择器:

$('table[id*="taskgrid"] tbody tr')

【讨论】:

问题是我在一页上有多个gridviews,gridviews的总数可能不同,我为网格分配了一个由taskgrid_ +网格名称组成的ID(每个都不同网格)。当我偶然发现 $('table[id*="taskgrid"] tbody tr') 时,它会搜索一个 ID 包含 taskgrid 的表。在此之后,鼠标悬停和单击功能确实起作用,但以下用于检查是否选中了单击网格中的所有复选框的功能,检查从该网格视图中选择/取消选择所有复选框。上面的函数我加了。 然后选择 "contains" 选择器 --> $('table[id*="taskgrid"] tbody tr')

以上是关于GridView 上的 jQuery 函数在页面回发后停止工作(鼠标悬停,单击)的主要内容,如果未能解决你的问题,请参考以下文章

回发后 Jquery 移动页面上的 Jquery 事件

Gridview 更新按钮折叠 jQuery 触发器

在gridview页面更改后Jquery colorbox不起作用

jQuery填充的Gridview在回发时丢失数据

jQuery单击gridview行上的选择按钮

使用 jQuery 检索表中的上一行和下一行