ASP.NET回发后保持当前的jQuery手风琴窗格打开?

Xai*_*oft 20 asp.net jquery jquery-ui

我在asp.net aspx weppage上有一个jquery手风琴.在窗格内,我有asp.net按钮.当我单击按钮,我所在的窗格,关闭并重新加载页面,默认为第一个窗格.我不介意重新加载,但有没有办法在重新加载后保持当前窗格打开.现在,我只是在一个带有手风琴id的div上调用accordion().

小智 27

您可以使用隐藏的输入字段在回发期间保持活动的折叠式索引,然后在手风琴的更改事件期间使用javascript填充它.

<asp:HiddenField ID="hidAccordionIndex" runat="server" Value="0" />

<script language="javascript" type="text/javascript">
    $(function(){
        var activeIndex = parseInt($('#<%=hidAccordionIndex.ClientID %>').val());

        $("#accordion").accordion({
            autoHeight:false,
            event:"mousedown",
            active:activeIndex,
            change:function(event, ui)
            {
                var index = $(this).children('h3').index(ui.newHeader);
                $('#<%=hidAccordionIndex.ClientID %>').val(index);
            }
        });
    });
</script>
Run Code Online (Sandbox Code Playgroud)

你可能想出一个更有效的方法来在变化事件中捕获活动索引,但这似乎有效.

页面加载后,它会从隐藏字段中检索活动索引并将其存储在变量中.然后,它使用检索到的索引和自定义函数初始化手风琴,以触发change事件,每当激活新窗格时,该事件会将新索引写入隐藏字段.

在回发期间,隐藏字段值将保留在ViewState中,以便在再次加载页面时,会初始化折叠,并显示最后一个窗格的索引.


Yel*_*nic 7

MaxCarey的解决方案似乎运行良好,但最新版本的jQuery UI(1.10.4)似乎有一些差异.正确的事件现在不会"更改",而是"激活"(或"beforeActivate",如果您想要取消事件的选项).

<asp:HiddenField runat="server" ID="hidAccordionIndex" Value="0" />
...

$(document).ready(function () {
    var activeIndex = parseInt($("#<%=hidAccordionIndex.ClientID %>").val());

    $("#accordion").accordion({
        heightStyle: "content",
        active: activeIndex,
        activate: function (event, ui) {
            var index = $(this).children('h3').index(ui.newHeader);
            $("#<%=hidAccordionIndex.ClientID %>").val(index);
        }
    });
});
Run Code Online (Sandbox Code Playgroud)

这里的问题是我可以验证hidAccordionIndex值被设置为正确的值,但是在回发时,无论我尝试什么,它都会被设置回0.我已经尝试将它设置为一个空字符串,就像Dave.Lebr1建议的那样,但它仍然没有坚持回发.

这应该在回发时保持可用,因为我的divAccordionIndex字段应该有ViewState(我已经验证它已启用).

还有其他人在这方面取得了成功吗?这个菜单在我的母版页中,它很有用......除此之外.