2011-07-18 91 views
0

我剛剛嘗試過Mike Alsup的Cycle Plugin。看起來很簡單,很容易爲我正在構建的頁面。但現在,我遇到了一個問題。Jquery Cycle插件,更新內容後更新滑塊,問題!

我正在將Cycle應用於圖像列表。現在,我試圖摧毀並重新應用插件,但沒有成功。

我觸發('destroy');當內容更改,並再次應用插件:

$('#slides').cycle('destroy'); 

$('#slides').cycle({ 
    fx:  'fade', 
    speed: 'fast', 
    timeout: 0, 
    next: '#next', 
    prev: '#prev' 
}); 

這適用於:

<div id="display"> 

    <a href="#" id="prev">Previous</a> 
    <a href="#" id="next">Next</a> 

    <div class="imgcontainer"> 
     <ul id="slides"> 
      > List of images to go into slideshow. < 
     </ul> 
    </div> 

    <div class="infocontainer"> 
     <h2> Object title </h2> 
     <p> Object information </p> 
    </div> 
</div> 

似乎一切都很好,直到我嘗試更新滑塊後改變形象:

TypeError: 'null' is not an object (evaluating 'p.cycleTimeout')

javascript in whole;

$('#projects > li').click(function(){ 

     var a = $(this); 

     $('#display .imgcontainer ul').html((a).children('ul.images').html()); 
     $('#display .infocontainer h2').html((a).children('h2').html()); 
     $('#display .infocontainer p').html((a).children('p').html()); 

     if(!$(a).hasClass('sub')) 
     { 
      var title = $(this).attr('title'); 
      $(a).siblings("[title='" + title + "']").toggle(); 
     } 

     var imgcount = $('.imgcontainer li').size(); 


     // Only apply plugin if there's more than one image in the list. 
     if(imgcount > 1) 
     { 
      $('#slides').cycle('destroy'); 

      $('#slides').cycle({ 
       fx:  'fade', 
       speed: 'fast', 
       timeout: 0, 
       next: '#next', 
       prev: '#prev' 
      }); 
     } 
    }); 

回答

1

第一次通過,即使循環從未應用過,您仍然調用「銷燬」。這可能是你的錯誤來自哪裏。

你不應該這樣做,反正。 Cycle具有專門用於此目的的功能addSlide。見例子:

+0

呀。但我不認爲這將滿足我的需要,因爲我不添加一些圖像,而是用一個完整的新圖像替換圖像列表。還是我得到了addSlide都錯了? – Xavio

+0

啊。那麼,我認爲在一個不存在的幻燈片上調用destroy是你的問題。也許在初始化它時向幻燈片ul添加一個類,然後在銷燬它之前檢查該類,例如'if($('#slides')。hasClass('cycle'))$('#slides')。cycle('destroy');' –

+1

也使用了一個[cached selection](http:// jquery-howto .blogspot.com/2008/12 /高速緩存功能於jquery.html) – rtpHarry