【问题标题】:Keep Collapsable Div Open After Postback回发后保持可折叠 Div 打开
【发布时间】:2016-04-09 15:19:44
【问题描述】:

我有一个包含一堆这些过滤器的面板。默认情况下,它们都是折叠的,但是当您单击按钮时,它会展开 div。但是,每次回发时,div 都会折叠。如何使 div 的当前状态在回发中保持不变?

                <h4 class="contentFilterHeader">Start Date</h4>
                <button type="button" class="btn" data-toggle="collapse" data-target="#startDate">
                <div id="startDate" class="collapse">
                    <label for="from">Before:</label>
                    <div class="form-group">
                        <div class="date">
                            <div class="input-group">
                                <input type="text" class="form-control" id="startPicker" runat="server" name="date" />
                                <span class="input-group-addon><span class="glyphicon glyphicon-calendar"></span></span>
                            </div>
                        </div>
                    </div>

【问题讨论】:

    标签: javascript html css postback collapse


    【解决方案1】:

    使用 HiddenField 来存储面板的状态。

    【讨论】:

      【解决方案2】:

      您可以将runat=server 添加到整个#startDate div 中,并在检查isPostBack 后从后面的代码中将Class 设置为它们,或者更好的是附加一些javascript 代码以在页面就绪时打开它

      startDate.innerHtml = startDate.innerHtml + "<script> $(document).ready(function(){ $('#startDate').collapse('show') }) </script>";
      

      假设您使用的是 c# 和 bootstrap

      编辑

      您可以使用以下代码 http://codepen.io/jammer99/pen/eZyqEN

      var t,
        //read cookie and determine if any panel was open before
        earlierPanel = readCookie("openpanel")
        //if value is found collapse all earlier panels and then open the last panel
      if (earlierPanel) {
        $('#accordion .panel-collapse').removeClass("in");
        $("#" + earlierPanel).addClass("in")
      }
      //reset the behaviour when user opens another panel
      $('#accordion').on('shown.bs.collapse', function(w) {
        t = w.target;
        createCookie("openpanel", $(t).attr("id"))
      })
      
      // remove cookie value using the following or you can write your code to delete the cookie
      $('#accordion').on('hide.bs.collapse', function(w) {  
        createCookie("openpanel","")
      })
      
      function createCookie(name, value) {
        document.cookie = name + "=" + value + "; path=/";
      }
      
      function readCookie(name) {
        var e = name + "=";
        var a = document.cookie.split(";");
        for (var d = 0; d < a.length; d++) {
          var f = a[d];
          while (f.charAt(0) == " ") {
            f = f.substring(1, f.length)
          }
          if (f.indexOf(e) == 0) {
            return f.substring(e.length, f.length)
          }
        }
        return null
      };
      

      【讨论】:

      • 我正在使用 c# 和引导程序。但是,我希望默认情况下折叠 div。如果用户打开一个,那么我希望它在回发中保持打开状态,直到他们关闭它
      • 正确。这就是这个小小的 javascript sn-p 要做的事情。它将检测回发并在回发时打开 div。您只需要指定正确的目标,也许您可​​以使用 cookie 来完成。
      • 也许我有一个误解,但该代码会进入代码隐藏的页面加载事件并在每次回发时折叠 div?我不一定想让 div 打开。我只希望它在回发发生之前由用户打开。否则应该默认关闭,已经是这样了。
      • @JohnSmith 你能试试我修改过的代码吗?此代码仅是 javascript,不需要服务器端编码。 :) 附:我知道这有点矫枉过正,但它应该可以完成这项工作。
      • 唯一的问题是,一旦我打开它,即使在我关闭它之后它仍然在回发中保持打开状态
      猜你喜欢
      • 1970-01-01
      • 2017-10-17
      • 2023-03-06
      • 2018-12-13
      • 2020-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多