ASP.NET AJAX之UpdatePanel 和JQUERY冲突

来源:互联网 发布:淘宝网店怎么关闭 编辑:程序博客网 时间:2024/06/06 09:01

最近一个项目遇到了一点点麻烦,请看问题描述:
在第一次页面加载时,元素A的X效果正常,点击B之后,页面局部刷新,此时,回到A,元素A失去X效果.

开始以为是前端我这到程序员那里出现问题,但仔细检查之后发现没有,后来了解了下页面应用了ASP.NET AJAX局部刷新,这就明朗了,估计是和JQUERY冲突了。

问题重现:

1. ASP.NET AJAX在页面中添加ScriptManager和UpdatePanel

2. 在UpdatePanel中添加元素A

3. 用jQuery对元素A添加X效果

4. 在UpdatePanel中加一个Button B用作postback

这样问题就出现了。

分析1:

UpdatePanel在应用中主要用于局部刷新,避免整个页面的Postback。UpdatePanel实现局部刷新的核心在于MicrosoftAjaxWebForm.js文件,它的局部刷新过程就是将页面提交到服务端(包含ViewState),执行服务端代码后异步将在UpdatePanel内的HTML进行重新呈现。在此过程中,页面的其它部分并没有状态更改。

分析2:

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 slide(){
//here is code
}
function load() {
Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler);
}
function EndRequestHandler() {
slide();
}
</script>

<body onload="load()">

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 id密码忘记了怎么办 如果忘记qq密码怎么办 word工具栏隐藏了怎么办 工行账号被冻结怎么办 公司账号被冻结怎么办 哈罗单车冻结了怎么办 百度云账号违规怎么办 百度外卖被冻结怎么办 公司账户被冻结怎么办 app账号被限制怎么办 微信号限制登录怎么办 微信被永久封了怎么办 储蓄卡被冻结怎么办 百度云qq登录怎么办 微信发红包忘记密码怎么办 电脑wps表格打不开怎么办 电脑wps文字打不开怎么办 电脑的wps打不开怎么办 qq锁异地登录怎么办 手机玩游游戏太热怎么办 运动秀注册不了怎么办 应用卸载不掉怎么办 aweme卸载不掉怎么办 win10系统安装失败怎么办 英雄联盟自动更新失败怎么办 英雄联盟老出错怎么办? lol下载0kb怎么办 手机md5校验失败怎么办 王者荣耀占内存怎么办 信用卡被暂停使用怎么办 宝宝爱涂鸦怎么办呢 大良老板欠薪怎么办 投影仪流明很低怎么办 户外涂鸦没有墙怎么办 word突然未响应怎么办 文档突然未响应怎么办 pr不自己播放怎么办 笔记本电脑空格键打字失灵怎么办 小孩受凉打喷嚏流鼻涕怎么办 头疼打喷嚏流鼻涕鼻塞怎么办 头疼打喷嚏想吐怎么办