2010-07-01 16 views
7

मेरे पास एक पृष्ठ है जिसमें jQuery टैब का एक सेट है। सभी टैब एक ही लक्ष्य div पर इंगित करते हैं, लेकिन इसे AJAX के माध्यम से अलग-अलग सामग्री के साथ लोड करते हैं। जब मैं प्रारंभिक पूर्ण पृष्ठ लोड करता हूं तो मुझे विभिन्न कारकों के आधार पर सक्रिय टैब को अलग-अलग सेट करने की आवश्यकता होती है। लक्ष्य div में सामग्री पहले से ही इस प्रारंभिक लोड के लिए सर्वर पर सेट है, इसलिए मुझे टैब पर क्लिक करने की आवश्यकता नहीं है, मुझे बस सही टैब को 'चयनित' पर सेट करने की आवश्यकता है। मैंने प्रासंगिक "ली" एचटीएमएल तत्व की कक्षा को "यूई-टैब-चयनित" में सेट करने का प्रयास किया है। इसका प्रारंभिक वांछित प्रभाव है, लेकिन पृष्ठ लोड होने के बाद एक और टैब चुनने पर प्रीइलेक्टेड एक बंद नहीं होता है, जिससे दो टैब चुने जाते हैं।विशिष्ट टैब का चयन करने वाले jQuery टैब

तो, क्या किसी को टैब को पूर्व निर्धारित करने के लिए वैकल्पिक तरीका पता है (इसे क्लिक किए बिना), या अजीब "यूई-टैब-चयनित" व्यवहार का समाधान जो मैं देख रहा हूं।

धन्यवाद।

<script type="text/javascript"> 
    $(function() { 
     $("#panelTabs").tabs({ 
      ajaxOptions: { 
       error: function(xhr, status, index, anchor) { 
        $(anchor.hash).html("Couldn't load this tab. We'll try to fix this as soon as possible."); 
       } 
      } 
     }); 

     $("#panelTabs").tabs({ 
      select: function(event, ui) { 
       getPage('hps.aspx?cmd=zz_' + ui.tab.id, 'panelA'); 
      } 
     }); 
    }); 
    </script> 

और सी # टुकड़ा है कि यूएल बनाता है:

StringBuilder tabsLiteral = new StringBuilder(); 
      tabsLiteral.Append("<ul>"); 
      foreach (KeyValuePair<string, Tab> kvp in tabs) 
      { 
       tabsLiteral.Append("<li>"); 
       // Note - the kvp.Value.URI determines what should happen when the Tab is clicked 
       tabsLiteral.Append("<a id=\"" + kvp.Value.URI + "\" href=\"#panelTabs\">" + kvp.Value.Caption + "</a>"); 
       tabsLiteral.Append("</li>"); 
      } 
      tabsLiteral.Append("</ul>"); 
      _panelTabs.Controls.Add(new LiteralControl(tabsLiteral.ToString())); 

      HtmlGenericControl ctl = new HtmlGenericControl(); 
      StringBuilder html = new StringBuilder(); 
      html.Append("<script type=\"text/javascript\">"); 
      html.Append("$(\"#panelTabs\").tabs({selected: 2});"); 
      html.Append("</script>"); 
      ctl.InnerHtml = html.ToString(); 
      _panelTabs.Controls.Add(ctl); 

एक और संस्करण:

StringBuilder tabsLiteral = new StringBuilder(); 
      tabsLiteral.Append("<ul>"); 
      foreach (KeyValuePair<string, Tab> kvp in tabs) 
      { 
       string active = ""; 
       if (currentTabCaption == kvp.Value.Caption) 
       { 
        //active = " class=\"ui-tabs-selected\""; 
       } 
       tabsLiteral.Append("<li" + active + ">"); 
       // Note - the kvp.Value.URI determines what should happen when the Tab is clicked 
       tabsLiteral.Append("<a id=\"" + kvp.Value.URI + "\" href=\"#panelTabs\">" + kvp.Value.Caption + "</a>"); 
       tabsLiteral.Append("</li>"); 
      } 
      tabsLiteral.Append("</ul>"); 
      _panelTabs.Controls.Add(new LiteralControl(tabsLiteral.ToString())); 

      HtmlGenericControl ctl = new HtmlGenericControl(); 
      StringBuilder html = new StringBuilder(); 
      html.Append("<script type=\"text/javascript\">"); 
      //html.Append("$(\"#panelTabs\").tabs('option','selected', 2);"); 
      html.Append(@"$(function() { 
       alert('initialising tabs'); 
       $(""#panelTabs"").tabs({ 
        ajaxOptions: { 
         error: function(xhr, status, index, anchor) { 
          $(anchor.hash).html(""Couldn't load this tab. We'll try to fix this as soon as possible.""); 
         } 
        }, 
        select: function(event, ui) { 
         getPage('hps.aspx?cmd=zz_' + ui.tab.id, 'panelA'); 
        } 
       }); 
      });"); 
      html.Append("$(\"#panelTabs\").tabs({selected: 2});"); 
      html.Append("</script>"); 
      ctl.InnerHtml = html.ToString(); 
      //_panelTabs.Controls.Add(ctl); 
      Page.Controls.Add(ctl); 
+0

आपको एक कोड नमूना कार्रवाई में यह दिखा है? – spinon

+0

ध्यान दें कि यह आपके बाद क्या है, लेकिन यहां सी # खंड है जो ली बनाता है: यदि (currentTabCaption == kvp.Value.Caption) {active = "class = \" ui-tabs-चयनित \ " "; } tabsLiteral.Append (""); // नोट - kvp.Value.URI निर्धारित करता है कि टैब को टैब पर क्लिक करने पर क्या होना चाहिए। उदाहरण दें ("" + kvp.Value.Caption + ""); tabsLiteral।संलग्न करें (""); – DEH

उत्तर

4

आप अपने टैब टॉगल समारोह के अंदर पहली पंक्ति हो सकता था चयनित वर्ग को हटा दें:

var uiTabsSelected = '.ui-tabs-selected'; 
$(uiTabsSelected).removeClass(uiTabsSelected); 
+0

धन्यवाद, एक अच्छा विचार की तरह लगता है - मैंने फ़ंक्शन में अपनी दो पंक्तियों को चिपकाने का प्रयास किया लेकिन जेएस पहली पंक्ति के बारे में शिकायत कर रहा है (उम्मीद है; पहले '-' char पर) - कोई विचार क्यों? – DEH

+0

सही दिशा में मुझे इंगित करने के लिए धन्यवाद – DEH

22

जो आप खोज रहे हैं वह selected option है। जैसे

$("#MyTabs").tabs({ 
    selected: 2 
}); 
+0

@Gert G - धन्यवाद, जो प्रारंभ में काम करता है लेकिन फिर वही व्यवहार दिखाता है जैसे "UI- टैब-चयनित" वर्ग को ली तत्व में जोड़ा जा रहा है यानी मैं दूसरे टैब पर क्लिक करना चाहता हूं दो टैब चयनित के साथ। फिर से क्लिक करने पर यह स्वयं को बंद कर देता है और केवल एक टैब चयनित के रूप में दिखाया जाता है। – DEH

+0

@DEH - मुझे इसके साथ कभी समस्या नहीं हुई है। क्या आप अपने प्रश्न में कुछ कोड पोस्ट कर सकते हैं? धन्यवाद। –

+0

यह काम करना चाहिए। @DEH अपने मार्कअप और अपने प्रश्न में कोई प्रासंगिक जेएस पोस्ट करें। – offner

1

बदलें इस:

html.Append("$(\"#panelTabs\").tabs({selected: 2});"); 
इस के लिए

:

html.Append("$(\"#panelTabs\").tabs('option','selected', 2);"); 

संपादित करें: और ...

$(function() { 
     $("#panelTabs").tabs({ 
      ajaxOptions: { 
       error: function(xhr, status, index, anchor) { 
        $(anchor.hash).html("Couldn't load this tab. We'll try to fix this as soon as possible."); 
       }}, 
      select: function(event, ui) { 
       getPage('hps.aspx?cmd=zz_' + ui.tab.id, 'panelA'); 
      } 
     });  

    }); 
+0

मेरे परीक्षण में जो बिल्कुल एक टैब का चयन नहीं करता है, जबकि पहले संस्करण ने एक टैब का चयन किया था, लेकिन जब कोई अन्य टैब क्लिक किया गया था तो इसे 'रिलीज़' नहीं किया था। – DEH

+0

@DEH html.append ... लाइन से छुटकारा पाएं, अपने चुने हुए टैब के मान को पकड़ने के लिए एक छुपा फ़ील्ड जोड़ें, फिर जोड़ें: ", चयनित: $ ('[id * =" TabToSelect "]'। Val() "अपनी प्रारंभिक स्क्रिप्ट के लिए, कोडबेहिंड – offner

+0

@DEH में TabToSelect का मान सेट करें, मैंने पहले} को छोड़ दिया था। साथ ही, यदि आप अपने टैब को प्रारंभ करने के बाद टैब का चयन करने का प्रयास करते हैं तो यह आपके चयन ईवेंट को कॉल करेगा। यहां एक साधारण उदाहरण है: http://jsbin.com/anitu3 – offner

0

समाधान, जोड़ सकते हैं और वर्गों को दूर करने के था जैसा कि ethagnawl सुझाव दिया। निम्नलिखित सी # दोनों यूएल बनाया गया है, साथ ही आवश्यक jQuery स्क्रिप्ट इंजेक्शन दोनों दिखाता है। महत्वपूर्ण बिट शो में है: फ़ंक्शन जहां कक्षाओं का उपयोग किया जा रहा है। यह कोड है जो समस्या के आसपास काम करता है।

StringBuilder tabsLiteral = new StringBuilder(); 
      tabsLiteral.Append("<ul>"); 
      foreach (KeyValuePair<string, Tab> kvp in tabs) 
      { 
       //string tabClass = " class=\"ui-state-default\""; 
       string tabClass = " class=\"ui-state-default\""; 
       if (currentTabCaption == kvp.Value.Caption) 
       { 
        tabClass = " class=\"ui-tabs-selected\""; 
       } 
       tabsLiteral.Append("<li" + tabClass + ">"); 
       //tabsLiteral.Append("<li>"); 
       // Note - the kvp.Value.URI determines what should happen when the Tab is clicked 
       tabsLiteral.Append("<a id=\"" + kvp.Value.URI + "\" href=\"#panelTabs\">" + kvp.Value.Caption + "</a>"); 
       tabsLiteral.Append("</li>"); 
      } 
      tabsLiteral.Append("</ul>"); 
      _panelTabs.Controls.Add(new LiteralControl(tabsLiteral.ToString())); 

      HtmlGenericControl ctl = new HtmlGenericControl(); 
      StringBuilder html = new StringBuilder(); 
      html.Append("<script type=\"text/javascript\">"); 
      //html.Append("$(\"#panelTabs\").tabs('option','selected', 2);"); 
      html.Append(@"$(function() { 
       $('#panelTabs').tabs({ 
        select: function(event, ui) { 
         getPage('hps.aspx?cmd=zz_' + ui.tab.id, 'panelA'); 
        }, 
        show: function(event, ui) { 
         // You MUST set both 'ui-state-active' AND 'ui-tabs-selected' for tab UI to operate properly - if either are missing it doesn't work 
         $('.ui-tabs-selected').removeClass('ui-state-active').removeClass('ui-tabs-selected'); 
         $(ui.tab).addClass('ui-state-active').addClass('ui-tabs-selected'); 

         //$('#panelTabs').tabs('selected',idx); // WOULD have been nice if this had worked, but UI does not keep up 
        } 
       }); 
      });"); 
      html.Append("</script>"); 
      ctl.InnerHtml = html.ToString(); 
      //Page.Header.Controls.Add(ctl); // NEVER place script in the page header when the script must survive an AJAX delivery - it won't run 
      Page.Controls.Add(ctl); // Acceptable to place script on the page, as it WILL survive AJAX delivery 
1

किसी और मामले किसी में यहाँ जवाब की तलाश में आता है, वर्तमान एक टैब का चयन करने के लिए जिस तरह से (इस तारीख के रूप में) (jQuery यूआई 1.10) "सक्रिय" विकल्प का उपयोग करने के लिए है:

निर्दिष्ट सक्रिय विकल्प के साथ टैब प्रारंभ:

$(".selector").tabs({ active: 1 }); 

http://api.jqueryui.com/tabs/#option-active

संबंधित मुद्दे