我有一个带有“id = ShowDetails”的div。在我的javascript中我有这个:
$(document).ready(function () {
UIactions();
});
function UIactions () {
$('#ShowDetails').click(function () {
alert("bingo");
}
});
div位于更新面板内,后面会回发。当页面加载时,如果我点击div,我会得到宾果游戏,但是在回发之后,我没有。知道为什么吗?
感谢。
答案 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事件处理程序。