2009-08-20 106 views
0

好的,所以在某個地方,有些地方是錯誤的。當我使用1.3版時,手風琴工作正常。當我將jQuery升級到版本1.3.2時,它現在不再按照它的設想工作。我需要最新版本,因爲它解決了一些錯誤,IE6正在嘔吐...jQuery 1.3.2中的手風琴不起作用(在1.3中工作!)

所以,這裏的代碼,以及需要改變什麼,以便它與jQuery的最新vesion一起工作?

$(function() { 

$(".accordion h4").eq(2).addClass("active"); 
$(".accordion div").eq(2).show(); 
$(".accordion h4").click(function(){ 
    $(this).next(".accordion div").slideToggle("slow") 
    .siblings("div:visible").slideUp("slow"); 
    $(this).toggleClass("active"); 
    $(this).siblings("h4").removeClass("active"); 
}); 
$("div.accordion div").hide(); 
$("h4#open").trigger('click'); 

}); 

HTML雲一樣的東西:

<div class="accordion"> 

<h4 id="open">Content header</h4> 

<div> 
<ul> 
<li><strong>Something</strong> <em>Else</em></li> 
<li><strong>Something</strong> <em>Else</em></li> 
<li><strong>Something</strong> <em>Else</em></li> 
<li><strong>Something</strong> <em>Else</em></li> 
</ul> 

</div> 

<h4>Content header</h4> 

<div> 
<ul> 
<li><strong>Something</strong> <em>Else</em></li> 
<li><strong>Something</strong> <em>Else</em></li> 
<li><strong>Something</strong> <em>Else</em></li> 
<li><strong>Something</strong> <em>Else</em></li> 
</ul> 

</div> 

<h4>Content header</h4> 

<div> 
<ul> 
<li><strong>Something</strong> <em>Else</em></li> 
<li><strong>Something</strong> <em>Else</em></li> 
<li><strong>Something</strong> <em>Else</em></li> 
<li><strong>Something</strong> <em>Else</em></li> 
</ul> 

</div> 

我應該注意,它不工作,是擴大第二面板時,第一面板應合攏正常 - 但與1.3.2它並非如此...


*我已經更新了HTML與我r最終發生了,因爲它似乎是HTML/CSS出現問題。

我的CSS設置爲:

li strong{display:block;float:left;width:250px;background:#ccc;} 
li em{display:block;float:left;width:700px;background:#ddd;} 

,以便它給予「2列的表格狀」效應(以及方便客戶CMS編輯 - 點擊「大膽」按鈕,擊中「我」按鈕) - 但看起來這是浮動的元素,使手風琴不工作。當我刪除「float:left」時 - 它正常工作。

它並沒有消除這一事實,即這個相同的設置與jquery1.3.0協同工作,但不與jquery1.3.2協同工作 - 所以有些東西仍然是錯誤的!

+0

可以粘貼標記 – redsquare 2009-08-20 08:46:56

+0

標記已經在上面添加... – lnvrt 2009-08-20 08:57:31

+0

更新我的回答,工作功能在這裏(無任何造型)http://pastebin.me/e60983724a0a8dad1ffd2c46f5db71d4 – redsquare 2009-08-20 09:02:44

回答

1

我相信你的選擇器$(this).next(".accordion div")不起作用。 next()只抓取下一個兄弟,因此做一個看着孩子的過濾器很奇怪。

也嘗試使用帶有nodeName而不是純CSS類選擇器的選擇器。 使用div.accordian,而不是僅僅.accordian在你的js

嘗試

$(function() { 
    $("div.accordion h4").eq(2).addClass("active"); 
    $("div.accordion div").eq(2).show(); 

    $("div.accordion h4").live('click', function(){ 
     var $el = $(this); 
     $el.next() 
      .slideToggle("slow") 
      .siblings("div:visible") 
      .slideUp("slow"); 
     $el.toggleClass("active"); 
     $el.siblings("h4").removeClass("active"); 
    }); 

    $("div.accordion div").hide(); 

    $("h4#open").trigger('click'); 

}); 
+0

感謝redsquare(再次!) - 但它似乎沒有任何區別,仍然做同樣的事情...使用nodeName使規則更具體? – lnvrt 2009-08-20 08:40:09

+0

只是使選擇器更快。你能否通過我的標記 – redsquare 2009-08-20 08:46:25

+0

a .class選擇器將搜索所有元素,其中div.class可以根據下一個文檔 - http://docs.jquery首先使用getElementsByTagName – redsquare 2009-08-20 08:47:26

1

您可能需要升級你的手風琴庫也是如此。一些類型選擇器,例如Accordion使用的[@attr]樣式選擇器可能已被棄用。