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中,以便在再次加载页面时,会初始化折叠,并显示最后一个窗格的索引.
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(我已经验证它已启用).
还有其他人在这方面取得了成功吗?这个菜单在我的母版页中,它很有用......除此之外.
| 归档时间: |
|
| 查看次数: |
32429 次 |
| 最近记录: |