2011-04-05 21 views
0

Hey all, 我有一些通過動態slideToggle函數顯示的隱藏div。一切都很好,但是當你點擊其他鏈接時,div就會顯示出來。我想一次顯示一個div。點擊隱藏其他人並顯示新的。看來我永遠無法獲得完整的功能!jQuery不是:(this)排除除了前一個函數調用的類之外​​的所有內容

謝謝你的時間!我非常感激。這裏只是一個'小孩'。

HTML:

<div id="nav"> 
     <div class="menu"><a id="show_work">WORK</a></div> 
      <div id="work" class="sub"> 
       <p>hidden content</p> 
      </div> 
     <div class="menu"><a id="show_biography">BIO</a></div> 
      <div id="biography" class="sub" > 
       <p>hidden content</p> 
      </div> 
     <div class="menu"><a id="show_contact">CONTACT</a></div> 
      <div id="contact" class="sub"> 
       <p>hidden content</p> 
      </div> 
    </div> 

的Javascript的作品,但留給他們的所有開放:

$('#work, #biography, #contact').hide(); 
$('#nav .menu').click(function() { 
    $(this).next().slideToggle(400); 
    return false; 
}).next().hide(); 

的想什麼,我錯位的概念的Javascript:

$('#work, #biography, #contact').hide(); 
$('#nav .menu').click(function() { 
    $(this).slideToggle(400); 
    $('.sub not:(this)').slideUp(400); 
}); 
return false; 
});.next().hide(); 

回答

0

這是你在找什麼?

$('.sub').hide(); 
$('#nav .menu').click(function() { 
    $('.sub:visible').not($(this).next()).slideUp(400); 
    $(this).next().slideToggle(400); 
    return false; 
}); 

這是fiddle看它的工作。

+0

賓果。我真的明白你做了什麼!太棒了,謝謝! – technopeasant 2011-04-06 18:31:09

1

,我正編寫一個隱藏所有div的函數:

function hideDivs() { 
    $(".menu div").hide(); 
} 

然後你點擊這個樣子:

$('#show_work').click(function() { 
    hideDivs(); 
    $('#work').slideToggle(400); 
}); 

$('#show_biography').click(function() { 
    hideDivs(); 
    $('#biography').slideToggle(400); 
}); 

$('#show_contact').click(function() { 
    hideDivs(); 
    $('#contact').slideToggle(400); 
}); 

這是通過隱藏所有的div無論是點擊了哪些鏈接。您可以手動隱藏非目標div(如下所示),但我認爲隱藏它們都是一個好方法。

替代,(醜陋,少維護的 - 也需要邏輯跳過的slideToggle呼叫如果「顯示格」已經可見):

$('#show_work').click(function() { 
    $('#show_biography, #show_contact').hide(); 
    $('#work').slideToggle(400); 
}); 

$('#show_biography').click(function() { 
    $('#show_work, #show_contact').hide(); 
    $('#biography').slideToggle(400); 
}); 

$('#show_contact').click(function() { 
    $('#show_work, #show_biography').hide(); 
    $('#contact').slideToggle(400); 
}); 
+0

似乎它會立即讓公開項目關閉,然後逐漸打開新項目。看起來有點奇怪。在滑動打開新的項目時,不應該滑動關閉打開的項目嗎? – RandomEngy 2011-04-05 23:07:41

+0

是的,你可以滑動而不是隱藏 - 它比成品更重要。 – 2011-04-05 23:10:43

+0

這工作,但有點笨重。我用簡化的功能更新了我的問題。希望這有助於澄清我在找什麼 – technopeasant 2011-04-06 06:59:24

0

The accordion control from jQuery UI似乎將你在找什麼。

+0

方式酷!從來沒有見過它......不幸的是,它始終保持開放(我想從全部關閉開始),並與我的佈局(隱藏的div不直接在相應的鏈接下面)發生衝突。試過吉米 - 但它不夠流暢。也有這個奇怪的突出事情發生。 – technopeasant 2011-04-06 06:58:38

+0

@technopeasant手風琴控制器有一個可摺疊的選項,可以關閉所有部分。但是,如果它與其他事物相沖突,那就不能解決問題。 – EvilAmarant7x 2011-04-06 16:42:17

相關問題