zoukankan      html  css  js  c++  java
  • Updatepanel 后端返回后,在 Updatepanel 内控件的前端 js 失效问题

    实际情况:点击下箭头弹出列表,点击列表上的隐藏按钮隐藏列表。

    背景:模块没有使用Js或者Jquery的Ajax功能,而是使用Asp.Net的Ajax控件——UpdatePanel + ScriptManager 的方式

    问题:按钮均使用.Net的单击事件,页面加载时功能正常,当使用了如Ask后端事件返回后,前端的 Hide 功能失效

    截图如下:

    01_thumb[3]

    02_thumb[3]

    代码如下:

    $(document).ready(function () {
            RegisterJs();
        });
    
        function RegisterJs() {
    
            $(".NewestArea").hide();
    
            //显示Note区域
            $(".ShowNoteListArea").click(function () {
                $(".NewestArea").hide("slow");
                $(".NoteListArea").slideDown("slow");
            });
    
            //隐藏Note区域
            $(".HideNoteListArea").click(function () {
                $(".NewestArea").show("slow");
                $(".NoteListArea").slideUp("slow");
                return false;
            });
        }
    <asp:UpdatePanel ID="UpdatePanelNoticeControl" runat="server">
        <ContentTemplate>
            
            <!-- NoticeControl控件 -->
            <div class="NoticeControl">
                
                <!-- 最新Note区域 -->
                <div class="NewestArea">
                    
                    <!-- 点击显示Note区域 -->
                    <span class="ShowNoteListArea glyphicon glyphicon-chevron-down"></span>
    
                    <!-- 最新Note标签 -->
                    <asp:Label ID="NewestShow" runat="server"></asp:Label>
    
                </div>
                
                <!-- NoteList区域 -->
                <div class="NoteListArea">
                    <ul>
                        <li>
                            <ul>
                                <asp:Repeater ID="NoteList" runat="server">
                                    <ItemTemplate>
                                        <li>
                                            <%#Eval("NoteContent")%>
                                        </li>
                                    </ItemTemplate>
                                </asp:Repeater>
                            </ul>
                        </li>
                        <li>
                            <asp:TextBox ID="TxtNoteContentValue" runat="server" TextMode="MultiLine" Width="500px" Height="50px"></asp:TextBox>
                        </li>
                        <li>
                            <!--<input class="HideNoteListArea ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only ui-button-text" type="button" value="Hide" />-->
                            <asp:LinkButton ID="HideNoteListArea" CssClass="HideNoteListArea ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only ui-button-text" runat="server">
                                <span class="glyphicon glyphicon-chevron-up" style="margin-right: -8px;"></span>
                                <span class="ButtonText">Hide</span>
                            </asp:LinkButton>
                            <asp:LinkButton ID="AskGo" CssClass="ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only ui-button-text" OnClick="AskGo_Click" runat="server">
                                <span class="glyphicon glyphicon-question-sign" style="margin-right: -8px;"></span>
                                <span class="ButtonText">Ask</span>
                            </asp:LinkButton>
                            <asp:LinkButton ID="AnswerGo" CssClass="ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only" OnClick="AnswerGo_Click" runat="server">
                                <span class="glyphicon glyphicon-info-sign" style="margin-right: -8px;"></span>
                                <span class="ButtonText">Answer</span>
                            </asp:LinkButton>
                            <asp:LinkButton ID="CompleteGo" CssClass="ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only" OnClick="CompleteGo_Click" runat="server">
                                <span class="glyphicon glyphicon-ok-circle" style="margin-right: -8px;"></span>
                                <span class="ButtonText">Complete</span>
                            </asp:LinkButton>
                            <asp:Label ID="ResultShow" runat="server"></asp:Label>
                        </li>
                    </ul>
                </div>
            </div>
        </ContentTemplate>
        <Triggers>
            <asp:AsyncPostBackTrigger ControlID="AskGo" />
            <asp:AsyncPostBackTrigger ControlID="AnswerGo" />
            <asp:AsyncPostBackTrigger ControlID="CompleteGo" />
        </Triggers>
    </asp:UpdatePanel>

    后端事件省略。

    ——————————————————————————————————————————————————————

    问题解决方案一:

    该方法网络上均有提及,然而并没有解决我的问题(求圈子朋友帮忙解答),个人表示对原理还是半知不解,继续研究中。方法如下:

    在每一个可能引起对前端Js影响的后端事件结束位置使用下面代码注册Js:

    ScriptManager.RegisterClientScriptBlock(UpdatePanelNoticeControl, this.GetType(), "RegisterJs", "RegisterJs();", true);

    ——————————————————————————————————————————————————————

    问题解决方案二:

    百度另寻来方法:

    因为Updatapanel没有postback,你的js不会重新加载。所以失效。更改你的页面代码如下就可以了:
    <script type="text/javascript">
    
        var prm = Sys.WebForms.PageRequestManager.getInstance();
        prm.add_endRequest(function () {
    
            // re-bind your jquery events here
            $(document).ready(function () {
                RegisterJs();
            });
    
        });
    
        $(document).ready(function () {
            RegisterJs();
        });
    
        function RegisterJs() {
    
            $(".NewestArea").hide();
    
            //显示Note区域
            $(".ShowNoteListArea").click(function () {
                $(".NewestArea").hide("slow");
                $(".NoteListArea").slideDown("slow");
            });
    
            //隐藏Note区域
            $(".HideNoteListArea").click(function () {
                $(".NewestArea").show("slow");
                $(".NoteListArea").slideUp("slow");
                return false;
            });
        }
    
    </script>

    果然,问题解决了!

    但是到此时,问题的第一个解决方案没有行通,不免心不安,所以挂单求解答!圈子的大牛们,帮帮忙!我也继续到百度寻求答案!

  • 相关阅读:
    打印二叉树和为某一值的路径
    顺时针打印数组
    算术表达式
    堆内存与栈内存详解
    【腾讯校招在线考试附加题】将一个10进制数转换为四位定长的36进制数
    反转链表
    记录github出错及解决方案
    centos7操作防火墙
    无法在web.xml或使用此应用程序部署的jar文件中解析绝对uri:[http://java.sun.com/jsp/jstl/core]解决方法
    MyBatis联表查询——别名方式
  • 原文地址:https://www.cnblogs.com/herbertchina/p/5267771.html
Copyright © 2011-2022 走看看