【问题标题】:Bootstrap accordion prevent collapse on postback in asp.netBootstrap 手风琴防止在 asp.net 中回发时崩溃
【发布时间】:2014-08-24 12:24:05
【问题描述】:

我有一个引导手风琴,我尝试在回发中重新打开最后打开的窗格,就像有人单击我页面上的保存按钮一样。我找到了这个解决方案:Retain Twitter Bootstrap Collapse state on Page refresh/Navigation

但我无法对此发表评论,因为我作为用户没有足够的积分。

由于某种原因,我无法使该功能正常工作:

//when a group is shown, save it as the active accordion group
$("#applicant-accordion").bind('shown', function () {
    var active = $("#applicant-accordion .in").attr('id');
    $.cookie('activeAccordionGroup', active)
});

我正在尝试在 FireBug 中对其进行测试,但我从来没有达到 var active 的要求。它停在 $("#applicant-accordion).bind 行。我尝试将 .bind 更改为 .on,因为我的 jQuery 是 1.7.2 版

我很茫然,希望您能指导我找到解决方案。我在 ASP.NET 中构建它。

<script src="../Scripts/jquery-1.7.2.js" type="text/javascript"></script>
<script src="../Scripts/bootstrap/js/bootstrap.js" type="text/javascript" />
<link href="../Scripts/bootstrap/css/bootstrap.min.css" rel="stylesheet" type="text/css" />
<script src="https://raw.github.com/carhartl/jquery-cookie/master/jquery.cookie.js" />

<script type="text/javascript">
    $(document).ready(function () {
        var last = $.cookie('activeAccordionGroup');
        if (last != null) {
            //remove default collapse settings
            $("#applicant-accordion .panel-collapse").removeClass('in');
            //show the account_last visible group
            $("#" + last).addClass("in");
        }
    });

    //when a group is shown, save it as the active accordion group
    $("#applicant-accordion").on('shown', function () {
        var active = $("#applicant-accordion .in").attr('id');
        $.cookie('activeAccordionGroup', active)
    });

</script>

    <div class="accordion" id="applicant-accordion">
        <div class="accordion-group">
            <div class="accordion-heading">
                <a class="btn accordion-toggle" data-toggle="collapse" data-parent="#applicant-accordion" href="#uInfo">Applicant information</a>
            </div>
            <div id="uInfo" class="accordion-body collapse in">
                <div class="accordion-inner">
                </div>
            </div>
        </div>

        <asp:Panel Visible="false" runat="server" ID="assistancePanel">
            <div class="accordion-group">
                <div class="accordion-heading">
                    <a class="btn accordion-toggle" data-toggle="collapse" data-parent="#applicant-accordion" href="#meetgreet">Accommodation and Meet & Greet information</a>
                </div>
                <div id="meetgreet" class="accordion-body collapse">
                    <div class="accordion-inner">
                    </div>
                </div>
            </div>
        </asp:Panel>

        <div class="accordion-group">
            <div class="accordion-heading">
                <a class="btn accordion-toggle" data-toggle="collapse" data-parent="#applicant-accordion" href="#application">Application, documents & options</a>
            </div>
            <div id="application" class="accordion-body collapse">
                <div class="accordion-inner">
                </div>
            </div>
        </div>

        <div class="accordion-group">
            <div class="accordion-heading">
                <a class="btn accordion-toggle" data-toggle="collapse" data-parent="#applicant-accordion" href="#comments">Comments</a>
            </div>
            <div id="comments" class="accordion-body collapse">
                <div class="accordion-inner">
                </div>
            </div>
        </div>

        <div class="accordion-group">
            <div class="accordion-heading">
                <a class="btn accordion-toggle" data-toggle="collapse" data-parent="#applicant-accordion" href="#changelog">Changelog</a>
            </div>
            <div id="changelog" class="accordion-body collapse">
                <div class="accordion-inner" runat="server" id="changelogItems">
                </div>
            </div>
        </div>
    </div>

【问题讨论】:

标签: javascript jquery twitter-bootstrap


【解决方案1】:

只是为了发布我的解决方案:

添加了一个隐藏字段:

<asp:HiddenField ID="hfAccordionIndex" runat="server" />

以及页面底部的 JavaScript 以确保 DOM 具有元素:

<script type="text/javascript">
    $(document).ready(function () {
        var last = $('#<%= hfAccordionIndex.ClientID %>').val();
        if (last != null && last != "") {
            //remove default collapse settings
            $("#applicant-accordion .collapse").removeClass('in');
            //show the account_last visible group
            $("#" + last).collapse("show");
        }
    });

    //when a group is shown, save it as the active accordion group
    $("#applicant-accordion").on('shown', function () {
        var active = $("#applicant-accordion .in").attr('id');
        $('#<%= hfAccordionIndex.ClientID %>').val(active);
    });
</script>

【讨论】:

    【解决方案2】:

    一般来说,只要您想在 ASP.NET 中回发后保留一个值,就有一种通用方法。

    将值存储在 ASP.NET 隐藏字段中。在您的情况下,将以下 active 变量的值存储在隐藏字段中。

     var active = $("#applicant-accordion .in").attr('id');
    

    由于 ASP.NET 维护的视图状态,在回发后,隐藏字段将保留该值。然后,您可以在页面加载时使用此值来设置手风琴。

    $(document).ready(function () {
            var last = // Get value from the hidden field
            if (last != null) {
                // Set the accordin values.
            }
        });
    

    【讨论】:

    • 是的,我明白了。这个答案实际上让我想到了 DOM 中的元素,所以我将脚本移到了我的页面底部,这使它工作。不过,我会考虑使用 hiddenfield 方法。
    【解决方案3】:

    **更新了使手风琴在当前选项卡处于活动状态时可以运行的代码。 **

    <div class="panel-group" id="accordion" role="tablist" aria-multiselectable="true">
      <div class="panel panel-default">
        <div class="panel-heading" role="tab" id="headingOne">
          <h4 class="panel-title"><a data-toggle="collapse" data-parent="#accordion" href="#collapseOne" aria-expanded="true" aria-controls="collapseOne">Header 1 </a></h4>
        </div>
        <div id="collapseOne" class="panel-collapse collapse in" role="tabpanel" aria-labelledby="headingOne">
          <div class="panel-body">Content 1</div>
        </div>
      </div>
      <div class="panel panel-default">
        <div class="panel-heading" role="tab" id="headingTwo">
          <h4 class="panel-title"><a class="collapsed" data-toggle="collapse" data-parent="#accordion" href="#collapseTwo" aria-expanded="false" aria-controls="collapseTwo">Header 2 </a></h4>
        </div>
        <div id="collapseTwo" class="panel-collapse collapse" role="tabpanel" aria-labelledby="headingTwo">
          <div class="panel-body">Content 2</div>
        </div>
      </div>
    
      <div class="panel panel-default">
        <div class="panel-heading" role="tab" id="headingThree">
          <h4 class="panel-title"><a class="collapsed" data-toggle="collapse" data-parent="#accordion" href="#collapseThree" aria-expanded="false" aria-controls="collapseThree">Header 3 </a></h4>
        </div>
        <div id="collapseThree" class="panel-collapse collapse" role="tabpanel" aria-labelledby="headingThree">
          <div class="panel-body">Content 3</div>
        </div>
      </div>
    
      <div class="form-group">
        <hr />
        <asp:Button ID="Button1" Text="Submit" runat="server" CssClass="btn btn-primary" />
        <asp:HiddenField ID="PaneName" runat="server" />
      </div>
    </div>
    
    
    <script type="text/javascript">
      $(function() {
        var paneName = $("[id*=PaneName]").val() != "" ? $("[id*=PaneName]").val() : "collapseOne";
        $("#accordion .collapse").removeClass("in");
        $("#" + paneName).addClass("in");
        $(".panel-heading a").click(function() {
          $("[id*=PaneName]").val($(this).attr("href").replace("#", ""));
        });
      });
    
    </script>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-22
      • 2017-06-05
      • 1970-01-01
      • 1970-01-01
      • 2012-12-21
      • 2020-10-28
      • 2019-02-27
      • 1970-01-01
      相关资源
      最近更新 更多