JQuery和UpdatePannel的问题
转:
http://www.cnblogs.com/Tim_Liu/archive/2010/11/25/1887937.html
最近在做一个项目,因为涉及到的字段数量很多所以想偷把懒,便使用了UpdatePannel,然后也用上了Jquery的插件做效果,然而当updatepannel中按钮点击后,jquery代码及样式都不见了,因为之前遇到过js类似的问题,所以就特意查了下网络上各大虾的解说,以下总结下大虾门的说法,顺便将自己的写法也记录下来。
以下是 LanceZhang's Tech Blog:原文地址 http://www.cnblogs.com/blodfox777/archive/2008/12/08/1347805.html
问题重现:
. 在页面中添加ScriptManager和UpdatePanel
. 在UpdatePanel中添加元素A
. 用jQuery对元素A添加X效果
. 在UpdatePanel中加一个Button B用作postback
结果:在第一次页面加载时,元素A的X效果正常,点击B之后,页面局部刷新,此时,元素A失去X效果
分析1:UpdatePanel
UpdatePanel在应用中主要用于局部刷新,避免整个页面的Postback。
UpdatePanel实现局部刷新的核心在于MicrosoftAjaxWebForm.js文件,它的局部刷新过程就是将页面提交到服务端(包含ViewState),执行服务端代码后异步将在UpdatePanel内的HTML进行重新呈现。
在此过程中,页面的其它部分并没有状态更改。
分析2:jQuery
jQuery可以通过简单的代码对HTML元素添加各种属性和事件句柄,我们可以在这里看到官方的文档:
Tutorials:How jQuery Works http://docs.jquery.com/How_jQuery_Works
在这里,我们可以得知,jQuery有个重要的事件标记“ready”,一般对HTML元素的效果和事件句柄都通过这个ready事件来添加,如下:
$(document).ready(function () { $("p").text("The DOM is now loaded and can be manipulated."); });
官方对此的说明是:ready事件会在DOM完全加载后运行一次,OK,至此,问题的原因差不多明白了:
原因:
因为在UpdatePanel局部刷新之后,其中的元素A被重写,而此时整个DOM树并没有重新加载,所以jQuery的ready事件并没有触发,所以元素A就失去了原有的特效。
解决方案:
我们可以将ready事件中执行的代码提取出来,然后通过捕获ScriptManager的EndRequest事件,在每次UpdatePanel局部刷新之后执行一次jQuery初始化代码,如下所示:
<script type="text/javascript"> function load() { Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler); }
function EndRequestHandler() { ReadyFunction1(); ReadyFunction2(); ReadyFunction3(); } </script><body onload="load()">
<link href="CSS/jquery-ui-1.8.6.custom.css" rel="stylesheet" type="text/css" /> <script src="Scripts/jquery-1.4.2.min.js" type="text/javascript"></script> <script src="Scripts/jquery-ui-1.8.6.custom.min.js" type="text/javascript"></script> <script language="javascript" type="text/javascript"> $().ready(function () { <span style="color: rgb(255, 0, 0);"> load();</span> addTabs(); }); function addTabs() { $("#tabs").tabs(); } function <span style="color: rgb(255, 0, 0);">load() </span>{ Sys.WebForms.PageRequestManager.getInstance().add_endRequest(<span style="color: rgb(255, 0, 0);">EndRequestHandler</span>); } function <span style="color: rgb(255, 0, 0);">EndRequestHandler()</span> { addTabs(); } </script> |
<asp:ScriptManager ID="SM1" runat="server"> </asp:ScriptManager> <div id="tabs"> <ul> <li><a href="#tabs-1">Nunc tincidunt</a></li> <li><a href="#tabs-2">Proin dolor</a></li> <li><a href="#tabs-3">Aenean lacinia</a></li> </ul> <div id="tabs-1"> <p> Tab 1 content</p> </div> <div id="tabs-2"> <asp:UpdatePanel ID="Up_1" runat="server"> <contenttemplate> <p> Tab 2 content</p> <asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" /></contenttemplate> <triggers> <asp:AsyncPostBackTrigger ControlID="Button1" EventName="Click" /> </triggers> </asp:UpdatePanel> </div> <div id="tabs-3"> <p> Tab 3 content</p> </div> </div> |
方法2: protected void Button1_Click(object sender, EventArgs e) { ScriptManager.RegisterStartupScript(this.Up_1, this.GetType(), "asdfas", "addTabs();", true); }
JQuery和UpdatePannel的问题的更多相关文章
- asp.net ajax与jquery的冲突问题解决
在网上看到有网友说,用了updatepannel这个asp.net ajax异步更新面板后,javascript或者jquery代码不起作用,实际上,可以在updatepannel的触发器中进行设置解 ...
- c#、sql、asp.net、js、ajax、jquery大学知识点笔记
<table cellSpacing="0" cellPadding="0" width="609" height="470 ...
- WebForm使用JQuery实现DropDownList无刷新联动
目录(?)[-] 1 JS代码 2 页面相关控件用的是平台封装的控件普通DropDownList也可以 3 后台C代码 注意事项 原来用的微软封装的Ajax控件UpdatePannel和Scri ...
- Angular杂谈系列1-如何在Angular2中使用jQuery及其插件
jQuery,让我们对dom的操作更加便捷.由于其易用性和可扩展性,jQuer也迅速风靡全球,各种插件也是目不暇接. 我相信很多人并不能直接远离jQuery去做前端,因为它太好用了,我们以前做的东西大 ...
- jQuery UI resizable使用注意事项、实时等比例拉伸及你不知道的技巧
这篇文章总结的是我在使用resizable插件的过程中,遇到的问题及变通应用的奇思妙想. 一.resizable使用注意事项 以下是我在jsfiddle上写的测试demo:http://jsfiddl ...
- Jquery的点击事件,三句代码完成全选事件
先来看一下Js和Jquery的点击事件 举两个简单的例子 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN&q ...
- jQuery实践-网页版2048小游戏
▓▓▓▓▓▓ 大致介绍 看了一个实现网页版2048小游戏的视频,觉得能做出自己以前喜欢玩的小游戏很有意思便自己动手试了试,真正的验证了这句话-不要以为你以为的就是你以为的,看视频时觉得看懂了,会写了, ...
- jquery和Js的区别和基础操作
jqery的语法和js的语法一样,算是把js升级了一下,这两种语法可以一起使用,只不过是用jqery更加方便 一个页面想要使用jqery的话,先要引入一下jqery包,jqery包从网上下一个就可以, ...
- jQuery之ajax实现篇
jQuery的ajax方法非常好用,这么好的东西,你想拥有一个属于自己的ajax么?接下来,我们来自己做一个简单的ajax吧. 实现功能 由于jq中的ajax方法是用了内置的deferred模块,是P ...
随机推荐
- cocos2d-x学习知识点记录
环境搭建 http://4137613.blog.51cto.com/4127613/751149 Cocos2d-x初探,HelloWorld解读 http://www.cnblogs.com/Ke ...
- App 性能分析
关键因素: ---- Instrument 性能分析神器 1. 启动时间 应用启动时间长短对用户第一次体验至关重要,同时系统对应用的启动.恢复等状态的运行时间也有严格的要求,在应用超时的情况下系统会直 ...
- Java入门-浅析Java学习从入门到精通【转】
一. JDK (Java Development Kit) JDK是整个Java的核心,包括了Java运行环境(Java Runtime Envirnment),一堆Java工具和Java基础的类库 ...
- Delphi XE5 Device compatibility
Delphi XE5 Device compatibility https://docs.google.com/spreadsheet/ccc?key=0AoEN2CEsVvJ0dGhVaWJE ...
- java版 正文抽取 基于文字连接比
package cn.tdt.crawl.jdbc; import java.util.regex.Matcher; import java.util.regex.Pattern; import or ...
- bzoj 1604: [Usaco2008 Open]Cow Neighborhoods 奶牛的邻居 曼哈顿生成树
大致题意:统计平面上由曼哈顿距离小于等于c的点对组成联通块的个数. 曼哈顿生成树的模板题.有关讲解:http://blog.csdn.net/acm_cxlove/article/details/88 ...
- 3G? 2G? 2.5G? 4G? 与 WIFI, GPRS,CDMA 3G无线上网
首先说说无线上网有哪几种形式? WIFI, GPRS, CDMA 3G无线上网 1>wifi全称wireless fidelity,是当今使用最广的一种无线网络传输技术.实际上就是把有线网络信号 ...
- QLGame 2d Engine SpriteBatch类创建
GitHub地址:https://github.com/wsgzxl/QLGame2dEngine 今天说五个问题: 1.前面说到的 颜色不对的问题,是因为FreeImage读取出来的数据格式与Ope ...
- 使用Common.Logging+log4net规范日志管理
Common.Logging+(log4net/NLog/) common logging是一个通用日志接口,log4net是一个强大的具体实现,也可以用其它不同的实现,如EntLib的日志.NLog ...
- SPOJ_10628_Count_on_a_Tree_(主席树+Tarjan)
描述 http://www.spoj.com/problems/COT/ 给出一棵n个节点的树,树上每一个节点有权值.m次询问,求书上u,v路径中第k小的权值. COT - Count on a tr ...