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

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

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

  

在更改事件期间,您可能会想出一种更有效的方法来捕获活动索引,但这似乎有效。

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

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

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

  ... $(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); } }); }); 

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

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

还有其他人在这方面取得了成功吗? 此菜单位于我的母版页中,除此之外,它的效果很好。

使用ClientScript.RegisterStartupScript编写按下按钮的accordion窗格的索引或id。 假设用户单击窗格3中名为btnSubmit按钮,那么它将按以下方式工作:

 protected void btnSubmitClick(object sender, EventArgs e) { //process button click //class this function at end: SetAccordionPane(3); } //you can call this function every time you need to set specific pane to open //positon private void SetAccordionPane(int idx) { var s=" 

现在在javascript中:

 $(function(){ if(paneIndex) { $('.selector').accordion({active: paneIndex}); } else { $('.selector').accordion(); } }); 

我知道这已经很晚了,但它仍然可以帮助有人挣扎。 这里的解决方案基本上是上述一些智慧的组合。 😉

我使用的是jquery-ui-1.10.4.custom.min.js和jquery-1.6.3.min.js。

  <%--the hidden field saves the active tab during a postback--%>    

这是javaScript:

  

要扩展以前的HiddenField想法,但不必破坏你的JS:

在您的页面中:

  

在你的JS中:

 $('#yourAccordion').accordion({ heightStyle: "content" , active: parseInt($('#hidAccordionIndex').val()) , activate: function (e, ui) { $('#hidAccordionIndex').val($(this).children('h3').index(ui.newHeader)); } }); 

关键是ClientIDMode =“静态”。 这种方法几乎不需要修改就可以使用几乎任何服务器端语言,因为JS不必更改,只需要一个隐藏字段。

它在我身边工作请检查……

 $(document).ready(function () { var activeIndex = parseInt($('#<%=hidAccordionIndex.ClientID %>').val()); alert(activeIndex); $("#accordion").accordion({ active: activeIndex, beforeActivate: function (event, ui) { var index = $(this).children('h3').index(ui.newHeader); $('#<%=hidAccordionIndex.ClientID %>').val(index); } }); }); 

放置可能必须在“更新”面板中单击或更新的按钮或gridview。 然后ui手风琴将100%正常工作+保证.. Sarath @ f1

创建手风琴时使用“激活”选项。 像这样的东西:

 $('.selector').accordion({ active: 2 }); 

这将激活手风琴中的第二个选项。 您还可以传递选择器以按ID进行选择。

 $("#accordion").accordion({ heightStyle: "content", collapsible: true, navigation: true }); 

navigation属性设置为true将保留accordion面板的状态。

添加到MaxCarey的post……
获得新手风琴指数的更可靠方法是

 change: function (event, ui) { var index = $(this).accordion("option", "active"); $("#<% =hidAccordionIndex.ClientID %>').val(index); } 

我有同样的问题,我来到这里。 1. MaxCarey的回答看起来很好,足以解决问题,但不幸的是我的手风琴没有ID。 (我使用的是第三方模板,他们只使用css类)。 2. Imran H. Ashraf也很好,但同样的问题是ID无法访问手风琴。

我的问题:1。我在手风琴中有一个带有编辑更新取消命令的DetailsView。 2.当我点击编辑按钮时它可以工作,但我的手风琴关闭了。

我的解决方案:1。我在表单上放了一个ScriptManager。 我在手风琴里放了一个UpdatePanel。 3.我将DetailsView放在UpdatePanel中。 那就是它,没有编码,没有代码,它工作正常。

这是html标记:

  

希望它可以帮助某人。

谢谢快乐编码

我使用这个解决方案使它适用于我的项目,但有些东西不起作用。

首先,手风琴不会将指数保留在记忆中,因此手风琴每次都会重新初始化。

其次,我无法找到'#<%=hidAccordionIndex.ClientID %>'的隐藏字段

所以,我做的是

1-将“隐藏字段”默认值设置为null

  

2-用此获取活动索引

确保parseInt,否则它将无法正常工作

  var activeIndex = parseInt($('input[id$=hidAccordionIndex]').val()); 

有我的javascript代码:

  $("#accordion").accordion ({ autoHeight:false, event: "mousedown", active: activeIndex, collapsible: true, change: function (event, ui) { var index = $(this).accordion("option", "active"); $('input[id$=hidAccordionIndex]').val(index); } }); 
  var activeIndex = parseInt($('#<%=hidAccordionIndex.ClientID %>').val()); $("#accordion,#inneraccordian").accordion({ heightStyle: "content", collapsible: true, navigation: true, active: activeIndex, beforeActivate: function (event, ui) { var index = $(this).children('h3').index(ui.newHeader); $('#<%=hidAccordionIndex.ClientID %>').val(index); } });