2011-06-02 56 views
1

原諒我,如果這是一個新手的問​​題:jQuery的切換如果沒有這個

我得設置爲打開下一個div來查看更多詳細信息的菜單,如果有另一個DIV已經打開,將其關閉而它打開了新的。我不知道如何關閉已打開的div,如果您點擊與該div關聯的標頭。它剛剛關閉&重新開放。

代碼:

$(document).ready(function() { 

    $(".heading").click(function(){ 
     if($(".content").is(":visible")){ 
      $(".less").removeClass("less"); 
      $(".content").slideUp(500); 
     } 
     $(this).next(".content").slideToggle(500); 
     $(this).children(".more").toggleClass("less"); 
    }); 

}); 

任何幫助表示讚賞。

+0

我認爲你的意思http://ardentpixels.com/clients/royalspa/services.html – 2011-06-02 17:17:59

+0

感謝。編輯鏈接。 – joshmax 2011-06-02 17:19:58

回答

5

試試這個:

$(".heading").click(function(){ 
    // Cache stuff, so we don't have to keep generating jQuery objects 
    var $this = $(this); 
    var $thisContent = $this.next(".content"); 

    // Saves a boolean value to see if the clicked element's content is 
    // currently visible 
    var thisWasVisible = $thisContent.is(":visible"); 

    // Removes less class and slides up ALL visible content divs 
    $(".less").removeClass("less"); 
    $(".content").slideUp(500); 

    // Slide the clicked element's content div down and add less class, 
    // but only if it's content was not originally visible. We don't want 
    // to show it again if it was just hidden. 
    if(!thisWasVisible){ 
     $thisContent.slideDown(500); 
     $this.children(".more").addClass("less"); 
    } 
}); 
+0

這對我來說有點困惑(可能是因爲我還在學習),但是做了它需要的東西。謝謝! – joshmax 2011-06-02 17:29:53

+0

@ J-Max:我已經給代碼添加了一些評論,希望有幫助。 – DarthJDG 2011-06-02 17:35:58

0

試試這個

$(document).ready(function() { 

$(".heading").click(function(){ 
    if($(".content").is(":visible")){ 
     $(".less").removeClass("less"); 
     $(".content").slideUp(500); 
    } else { 
     $(this).next(".content").slideDown(500); 
     $(this).children(".more").toggleClass("less"); 
    } 
}); 

}); 

可能是最激進的變化對你有什麼,應該工作。

+0

這適用於我的原始問題,但它會中斷:如果您單擊另一個標題,它將關閉所有內容並且不會打開新的div。 – joshmax 2011-06-02 17:22:49