JQUERY的效果在UpdatePanel中控件回发后失效的解决方案

本文介绍了解决ASP.NET UpdatePanel导致的jQuery事件绑定失效问题的方法。通过在UpdatePanel回发后重新绑定jQuery事件,确保了jQuery效果正常运行。文章提供了具体的实现代码示例。

在做.NET开发时,现在都常用UPDATEPANEL。这次项目中加入了Jquery的使用,但有些Jquery的效果在和UpdatePanel一起使用后,在UpdatePanel中有控件发生了PostBack事件后,Jquery的事件绑定就会失效。
解决方法:
1、先是在UpdatePanel中控件PostBack回发之后再重新注册一次Jquery的事件绑定。
    
    function reload() {
        Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler);
    }

    function EndRequestHandler() {
         //这里放JQUERY的事件绑定的代码,等于是再复制一段之前的JQUERY代码
    }
2、然后在后台的Page_Load()里:
    this.RegisterStartupScript("呵呵", "<script type=\"text/javascript\">reload();</script>");

或者在页面<body onload="load();">

示例代码:

页面代码(部分):

  <head runat="server">
    <META http-equiv=content-type content="text/html; charset=utf-8" />
    <title>OrderHere-Order</title>
    <link href="../App_Themes/DefaultThemes/css.css" rel="stylesheet" type="text/css">
    <script type="text/javascript" language="javascript" src="../Javascript/jquery-1.3.2.min.js"></script>
    <script type="text/javascript" language="javascript" src="../Javascript/tooltip.js"></script>
<style type="text/css">
.x_img, .x_screen {border:1px solid #ccc; padding:10px; margin:5px; font-size:12px;}
.x_img ul, .x_img li { list-style:none; padding:0; margin:0}
.x_img li {float:left; border:1px solid #eee; padding:5px; margin:5px; }
.x_img img {border:none; width:100px; height:75px;display:block;}
.x_preview {position:absolute; border:1px solid #ccc; background:#333;padding:5px;display:none;color:#fff;}
.x_preview p {margin:0; padding:0; font-size:12px; font-family:Verdana, Arial, Helvetica, sans-serif;word-break:break-all; width:180px}
.x_clear {clear:both}
</style>
   <script language="JavaScript">
         javascript:window.history.forward(1);
    </script>
</head>

<body>
    <form id="form1" runat="server">

                                                    <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
                                              <ContentTemplate>

                                                    </ContentTemplate>
                                             <Triggers>
                                                <asp:AsyncPostBackTrigger ControlID="dltProductCategory" EventName="SelectedIndexChanged" />
                                             </Triggers>
                                        
                                             </asp:UpdatePanel>   

   <script language="javascript">
                                               function load() {
                                         
                                                                       Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler);
                                                                       }
                                                  function EndRequestHandler() {
                                                                                                     var j = jQuery.noConflict();
this.toolTip = function(){
    var positionTooltip = function(event){
        var tPosX = event.pageX - 180;
        var tPosY = event.pageY +1;
        j('div.x_tooltip').css({top:tPosY, left:tPosX});
    };
    var showTooltip = function(event){
        //$('div.tooltip').remove();
        thisTxt = $(this).attr('title');
        j(this).attr('title'," ");
        j('<div class="x_tooltip">'+ thisTxt +'</div>').appendTo('body');
        positionTooltip(event);
    };
    var hideTooltip = function(){
        j(this).attr('title', thisTxt);
        j('div.x_tooltip').remove();
    };
    
    j('a.show').hover(showTooltip , hideTooltip).mousemove(positionTooltip);
};

this.screenshotPreview = function(elink, preBox, URLsource){
    var elemlink = elink; //要添加预览的链接
    var previewBox = preBox; //预览用的视图框
    var URL = URLsource; //预览图片地址来源
    
    var positionScreen = function(event){
        var tPosX = event.pageX - 180;
        var tPosY = event.pageY+1;
        j('.'+previewBox).css({top:tPosY, left:tPosX}).fadeIn("slow");
    };
    var showScreen = function(event){
        if(URL=='rel'){
            thisURL = j(this).attr('rel');    
        }else if(URL=='href'){
            thisURL = j(this).attr('href');
        }else return false;
        
        thisTitle = j(this).attr('title');
        j(this).attr('title','');
        var screenTxt;
        if(thisTitle != null){
            screenTxt = "<P>" +thisTitle+ "</p>";
        }else {
            screenTxt = "";
        }
        var screenTxt = (thisTitle != null)?"<p>"+thisTitle+"</p>" : "";
        j("<div class='" +previewBox+ "'><img width=180px height=170px src='" +thisURL+ "' alt='showpic' />" +screenTxt+ "</div>").appendTo("body");
         positionScreen(event);
    };
    var hideScreen = function(){
        j(this).attr('title',thisTitle);
        j('.'+previewBox).remove();
    };
    
    j('.'+ elemlink).hover(showScreen,hideScreen).mousemove(positionScreen);
};

j(document).ready(function(){
    //toolTip();
    screenshotPreview('preview','x_preview','href');
    screenshotPreview('screenshot','x_preview','rel');
});
                                                                                                    }
                                             </script>

    </form>

</body>

后台部分:

   protected void Page_Load(object sender, EventArgs e)
        {
            this.RegisterStartupScript("呵呵", "<script type=\"text/javascript\">load();</script>");

        }

可以解决在,update之后,jQuery效果失效的问题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值