您要求的是记住当前打开的面板。
由于此面板不是本机 asp.net 控件,因此 asp.net 不会在回发时记住该值。
一种解决方案是在容器中保留一个隐藏的输入控件,并在该输入中维护当前打开的 div 的值。
然后,即使在回发时,Asp.net 也会接收并发送回这些数据。
在准备好文档后,您可以通过读取此值重新打开打开的面板。
编辑:添加了一些代码
从您的选择器中,我假设您的 html 看起来像这样。
<div class="ContainerPanel">
<div class="collapsePanelHeader">
<div class="ArrowExpand"">
</div>
</div>
<div id="content1" class="Content"">
</div>
<div class="collapsePanelHeader">
<div class="ArrowExpand"">
</div>
</div>
<div id="content2" class="Content"">
</div>
<input id="selectPanel1" runat="server" class="selectPanel"/>
</div>
我为每个内容块添加了一个 ID。如果您没有 ID,则必须添加它们才能使此代码正常工作。
请注意 ContainerPanel 底部的输入标记。这将需要记住哪个 div 是打开的。asp.net 要求每个元素都有唯一的 id 标签。
<input id="selectPanel1" runat="server" class="selectPanel"/>
js会是这样的:
$(document).ready(function() {
$("div.ContainerPanel > div.collapsePanelHeader > div.ArrowExpand").toggle(function() {
$(this).parent().next("div.Content").show("slow");
$(this).attr("class", "ArrowClose");
//Put the id of the selected content into an input
//This is so that it goes to the server
var inputBox = $(this).parent().parent().find(".selectPanel");
inputBox.val("#" + $(this).parent().next("div.Content").attr("id"));
},function() {
$(this).parent().next("div.Content").hide("slow");
$(this).attr("class", "ArrowExpand");
});
//This supports multiple ContainerPanel divs.
$("div.ContainerPanel").each(function(e){
//retrive value of div open before postback and show it
var selectedContentId = $(this).find(".selectPanel").val();
if(selectedContentId != "")
$(selectedContentId).show();
});
});