回发后,updatepanel内部的jquery事件处理程序无法正常工作

时间:2011-02-11 22:13:20

标签: asp.net

我有一个带有“id = ShowDetails”的div。在我的javascript中我有这个:

    $(document).ready(function () {
       UIactions();
    });

    function UIactions () {
        $('#ShowDetails').click(function () {
            alert("bingo");
          }
     });

div位于更新面板内,后面会回发。当页面加载时,如果我点击div,我会得到宾果游戏,但是在回发之后,我没有。知道为什么吗?

感谢。

3 个答案:

答案 0 :(得分:2)

我知道这是一个非常古老的帖子,但是我遇到了这个问题,因为在更新面板内的内容更新后,我的jQuery脚本无法正常工作。

我找到了一个简单的解决方案,所有其他解决方案都不值得关注:)

简单地记得将你的asp.net控件添加到UpdatePanel's Triggers作为回发。

<Triggers>
     <asp:PostBackTrigger ControlID="....." />
</Triggers>

希望这对某人有所帮助,因为我花了太多时间寻找解决方案。

答案 1 :(得分:1)

正如@Artiom所说,这个问题是因为在更新时,UpdatePanel会用回发上生成的标记覆盖现有标记,这会删除你在UpdatePanel中对HTML元素所拥有的任何事件处理程序。

有几种方法可以解决这个问题,我在文章Rebinding Client-Side Events After a Partial Page Postback中对此进行了讨论。最简单的方法(IMO)是使用jQuery的live函数。从我的文章:

  

如果您正在使用jQuery,就像我在这些示例中所做的那样,有一种更简单的方法 - live()函数。 live()函数为现在或将来的一个或多个HTML元素定义事件处理程序。这意味着您可以说“嘿,jQuery,我希望您将此事件处理程序附加到页面上任何<a>元素的click事件,无论它现在存在还是将来存在。 “因此,如果稍后将<a>元素动态添加到页面,jQuery将自动将其click事件连接到指定的事件处理程序。

有关详细信息,请参阅文章以及示例。

答案 2 :(得分:0)

因为更新面板会重写所有javascript处理程序。您的情况的解决方案是在每次回发时将您的函数附加到javascript事件处理程序。