当前位置: 首页 > 面试题库 >

jQuery $(document).ready和UpdatePanels?

岳曦
2023-03-14
问题内容

我正在使用jQuery在UpdatePanel中的元素上附加一些鼠标悬停效果。事件绑定在中$(document).ready。例如:

$(function() {    
    $('div._Foo').bind("mouseover", function(e) {
        // Do something exciting
    });    
});

当然,这在第一次加载页面时效果很好,但是当UpdatePanel执行部分页面更新时,它不会运行,并且鼠标悬停效果在UpdatePanel内部不再起作用。

不仅在首页加载时,而且在每次UpdatePanel触发部分页面更新时,建议在jQuery中进行接线的推荐方法是什么?我应该使用ASP.NET
ajax生命周期来代替$(document).ready吗?


问题答案:

UpdatePanel完全替换更新中更新面板的内容。这意味着您订阅的那些事件不再被订阅,因为该更新面板中有新的元素。

解决此问题的方法是,在每次更新后重新订阅我需要的事件。我使用$(document).ready()初始负载,然后使用Microsoft的负载PageRequestManager(如果页面上有更新面板,则可用)重新订阅每个更新。

$(document).ready(function() {
    // bind your jQuery events here initially
});

var prm = Sys.WebForms.PageRequestManager.getInstance();

prm.add_endRequest(function() {
    // re-bind your jQuery events here
});

PageRequestManager是一个JavaScript对象,它是自动可用如果更新面板是在页面上。只要页面上有UpdatePanel,就不需要使用上面的代码做任何事情即可使用它。

如果需要更详细的控制,则此事件传递的参数类似于.NET事件传递参数的方式,(sender, eventArgs)因此您可以查看引发该事件的原因,并仅在需要时重新绑定。

这是来自Microsoft的文档的最新版本:msdn.microsoft.com/…/bb383810.aspx

根据您的需求,您可能有一个更好的选择是使用jQuery
.on()。这些方法比每次更新都重新订阅DOM元素更为有效。但是,在使用此方法之前,请先阅读所有文档,因为它可能会满足您的需求,也可能无法满足您的需求。有很多jQuery插件无法重构为使用.delegate().on(),因此在这种情况下,最好重新订阅。



 类似资料:
  • 问题内容: 题: 如果我链接两个都带有函数的JavaScript文件,会发生什么情况?一个会覆盖另一个吗?还是两者都被叫? 例如, jquery1.js: jquery2.js: 我相信最好的方法是将两个调用简单地合并为一个,但是在我的情况下这不太可能。 问题答案: 所有人都会被执行, 并且在首次调用的基础上运行!! 演示如您所见,它们不会互相替换 我还要提一件事 代替这个 您可以使用此快捷方式

  • 问题内容: 在ajax导航页面中,用于执行初始化javascript的经典“文档就绪”表单根本不会触发。 在ajax加载的页面中执行某些代码的正确方法是什么? (我的意思是,不是我的ajax …这是将我带到该页面的jQuery移动页面导航系统) 好的,我确实怀疑这样的事情……非常感谢=)但是…仍然不起作用,这是我的代码: 我需要指定div ID吗? 问题答案: 我花了一些时间来研究它,因为此时JQ

  • 本文向大家介绍jquery $(document).ready()和window.onload的区别浅析,包括了jquery $(document).ready()和window.onload的区别浅析的使用技巧和注意事项,需要的朋友参考一下 Jquery中$(document).ready()的作用类似于传统JavaScript中的window.onload方法,不过与window.onload

  • 问题内容: 我有一个使用的脚本,但没有使用jQuery中的其他任何脚本。我想通过删除jQuery依赖项来减轻它的负担。 如何在不使用jQuery的情况下实现自己的功能?我知道使用会有所不同,因为在加载所有图像,帧等之后会触发。 问题答案: 有一个基于标准的替代品,尽管IE8不支持,但超过98%的浏览器都支持它: jQuery的本机功能比window.onload复杂得多,如下所示。

  • 问题内容: 是以下简写吗? 我看到这种模式使用了很多,但是我找不到任何引用。如果它是的简写,是否有任何特定原因可能不起作用?在我的测试中,它似乎总是在ready事件之前触发。 问题答案: 的简写是(函数在哪里)。看这里。 您问题中的代码与无关。相反,它是一个以jQuery对象作为参数的立即调用的函数表达式(IIFE)。其目的是将变量的范围至少限制在其自己的块中,以免引起冲突。您通常会看到jQuer

  • 问题内容: vs 和我应该以表格或新方式书写的区别是什么? 如果我加载了Google api是更好的方法?还是同一件事? 我也看到人们使用 有人可以帮我,我迷路了。当我不知道所写的代码时,我会烦扰我。我想我应该阅读一下图书馆。全部都定义为同一件事吗? 问题答案: 两种方式是等效的,我个人更喜欢第二种方式,这只是准备文档的捷径。 关于构造,您实际上不需要使用运算符,如果不需要,jQuery会在内部使