2010-01-27 78 views
6

我正在使用jquery选项卡和以下js方法,如何以及我可以修改它以维护回发之间的选项卡状态? (这Page_Load中之后重置选项卡,第一个选项卡)jquery回发,回发后保持相同的选项卡

$(document).ready(function() { 

     //When page loads... 
     $(".tab_content").hide(); //Hide all content 
     $("ul.tabs li:first").addClass("active").show(); //Activate first tab 
     $(".tab_content:first").show(); //Show first tab content 

     //On Click Event 
     $("ul.tabs li").click(function() { 

      $("ul.tabs li").removeClass("active"); //Remove any "active" class 
      $(this).addClass("active"); //Add "active" class to selected tab 
      $(".tab_content").hide(); //Hide all tab content 

      var activeTab = $(this).find("a").attr("href"); //Find the href attribute value to identify the active tab + content 
      $(activeTab).fadeIn(); //Fade in the active ID content 
      return false; 
     }); 

回答

3

您可以在一个隐藏字段使用Javascript跟踪活动选项卡,然后选中隐藏字段加载页面时。 (也用Javascript)

另外,你可以使用UpdatePanels与ASP.Net AJAX消除回发。 (请注意,如果标签是在更新面板,他们将无法正常工作)

+0

我用更新面板不会导致回发。 – 2010-02-01 20:16:23

+0

我还使用了隐藏字段来跟踪选定的标签。有用。 – 2010-03-17 23:20:18

+0

我用更新面板..但是当我做一个按钮点击第二个选项卡时,回发导致显示第一个选项卡...为什么? – Muhammedh 2014-08-04 09:53:57

3

使用隐藏域另一种方法是使用cookie属性选项卡控件

$(“#标签“({ cookie:{ expires:1 } });

您需要引用jquery.cookie.js文件,这个工作

jQuery tabs cookie

+0

完美地工作。最简单,最优雅的解决方案。 – MGOwen 2014-03-05 04:39:13

+0

对此的任何工作示例都将非常有帮助! – Muhammedh 2014-08-04 09:42:28

+0

jQuery UI淘汰了cookie业务1.10 http://jqueryui.com/upgrade-guide/1.9/#deprecated-cookie-option – fortboise 2015-04-03 22:23:15

1

尝试以下操作:

<p class="hiddenData"><asp:HiddenField ID="hdnData" runat="server" /></p> 

<script type="text/javascript"> 
    $(document).ready(function() { 
     $('.tabs li a').click(function() { }); 
     $('.tabs li').hover(function() { 
      var liData = $(this); 
      $('.hiddenData input:hidden').val(liData.find('span').text()); 
     }); 
     if ($('.hiddenData input:hidden').val() != '') { 
      var liList = $('.tabs li'); 
      var hiddenData = $('.hiddenData input:hidden').val(); 
      liList.each(function() { 
       if ($(this).find('span').text() == hiddenData) { 
        $(this).find('a').click(); 
       } 
      }); 
     } 
    }); 
</script> 
0

你说

//When page loads... 
$(".tab_content").hide(); //Hide all content 

我会加载这与CSS,因为这是更快。隐藏可能是在做一个显示:无;

解决方案之一就是从代码隐藏中编写javascript代码。
和示例用C#

var selectedTab = IsAdvancedSearch ? "{'selected':1}" : String.Empty; 
ScriptManager.RegisterClientScriptBlock(this, GetType(), "search", String.Format(@"jQuery(document).ready(function() {{ jQuery('#search').tabs({0}); }});", selectedTab), true); 

或者你可以将属性和C#添加到#搜寻标签,并用JS阅读

C#

search.Attributes.Add("selectedtab", "1"); 

JS

jQuery("#search").attr("selectedtab"); 

另一个解决方案是查询字符串。
您可以从查询字符串读取值。

我会亲自挑选第一个或第二个。

0

隐藏字段的方法适合我。用含有

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

在.aspx和含有

$("#tabs").tabs({ active: <%= hfLastTab.Value %> }); 

活动选项卡的JS准备函数将每隐藏字段进行设置。 (这是jQuery UI v1.9属性,'active'f.k.a.'selected')。回发的各种控件可以提供将hfLastTab.Value设置为适当的索引。

我也希望能够指向一个特定的选项卡与另一个页面的URL,并花了很多时间抖动添加并尝试解析一个哈希ref结束之前,去查询字符串参数?吨= N。我将其解析为Page_Load()的!Page.IsPostback分支。对于全新的页面加载,如果没有指定任何内容,则转到制表符0;如果查询字符串具有参数,则转到制表符N。很多方式来处理解析。这里有一个:

 if (!Page.IsPostBack) { 
      string pat = @"t=(\d)"; 
      Regex r = new Regex(pat, RegexOptions.IgnoreCase); 
      Match m = r.Match(Request.Url.Query); 
      if (m.Success) hfLastTab.Value = m.Groups[0].ToString(); 
     } 
相关问题