2015-01-06 139 views
2

我想解決爲什麼unslick方法在我成功調用ajax後調用它時不工作。我已閱讀this後,我期待爲slick-initialized類,但我仍然得到錯誤unslick方法不起作用

TypeError: .$slides is null if (.$slides.parent().hasClass('slick-track'))

HTML

<div id="skills" class="skills_section"> 
    <div>Slide 1</div> 
    <div>Slide 2</div> 
    <div>Slide 3</div> 
</div> 

當我初始化圓滑頁面上加載的標記看起來像這樣:

<div id="skills" class="skills_section slick-initialized slick-slider"> 
    <div class="slick-list draggable"> 
    <div class="slick-track"> 
     <div class="slick-slide slick-cloned">Slide 1</div> 
     <div class="slick-slide slick-cloned">Slide 2</div> 
     <div class="slick-slide slick-cloned">Slide 3</div> 
    </div> 
    </div> 
</div> 

我有一個Ajax調用,將只需更換每個slick-slide

數據個
$.ajax({ 
    type: 'get', 
    url: '/public/index', 
    dataType: 'script', 
    data: data_send, 
    success: function(data) { 
    unSlickCarousel(); 
    slickCarousel(); 
    } 
}); 

功能

function slickCarousel() { 
    $('.skills_section').slick({ 
    infinite: true, 
    slidesToShow: 3, 
    slidesToScroll: 1 
    }); 
} 

function unSlickCarousel() { 
    if($('#skills').hasClass('slick-initialized')){ 
    $('.skills_section').unslick(); 
    } 
} 

但正如我剛纔所說,我得到的錯誤和HTML標記看起來像這樣

<div id="skills" class="skills_section slick-initialized slick-slider"> 
    <div>Slide 1</div> 
    <div>Slide 2</div> 
    <div>Slide 3</div> 
</div> 
+0

1)我不明白「我讀過這篇文章」是指什麼。 2)無論如何,我無法將您描述的問題與您發佈的代碼複製(http://jsfiddle.net/Palpatim/ezcot8o3/)。你能用MCVE更新嗎?浮動庫和頁面中的其他內容之間可能存在某種相互作用,但我們無法看到您迄今爲止所展示的內容。您還提到「替換每張幻燈片中的數據」,但您發佈的代碼並不這樣做。也許這個功能對你的結構做了些什麼? – Palpatim

+0

感謝您抽出寶貴時間來研究並製作出js小提琴。以及數據肯定會改變(目前不能顯示你)。我仔細看看你已經做了什麼,看看是否有任何明顯的禮物本身 – Richlewis

回答

0

我以前從未見過此錯誤消息。

我打算假設您的stackoverflow示例中的「浮動克隆」的3個實例只是複製/粘貼錯誤。 如果你真的「光滑克隆」出現所有這些時間,那就是你的錯誤。 unslick()方法需要刪除所有「光滑克隆」幻燈片作爲過程的一部分。 如果它刪除了所有幻燈片,那麼這就是幻燈片爲空的原因。實際js文件

讀線627看出,它這樣做: https://github.com/kenwheeler/slick/blob/master/slick/slick.js

8

我相信你叫滑頭方法的方式發生了變化。取而代之的$('.skills_section').unslick();

嘗試$('.skills_section').slick("unslick");

你打電話也直接的響應選項裏面的光滑選項

+0

拯救我的**** –

0

使用setTimeout調用這個用於初始化光滑()

function slickCarousel() { 
    setTimeout(function(){ 
    $('.skills_section').slick({ 
    infinite: true, 
    slidesToShow: 3, 
    slidesToScroll: 1 
    }); 
    }, 100); 
}