2015-01-06 4 views
2

Я пытаюсь понять, почему метод unslick не работает, когда я вызываю его после успешного вызова ajax. Я прочитал this пост, и я ищу для slick-initialized класса, но я все еще получаю ошибкуunlick метод не работает

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> 

у меня есть АЯКС вызов, который будет просто заменить данные в каждом 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? Может быть какое-то взаимодействие между библиотекой slick и чем-то еще на вашей странице, но мы не можем видеть это с тем, что вы показали до сих пор. Вы также упоминаете «замену данных в каждом слайде», но код, который вы опубликовали, не делает этого. Может быть, эта функция что-то делает для вашей структуры? – Palpatim

+0

Спасибо, что нашли время, чтобы посмотреть на это и создать скрипку js. ну, данные, безусловно, меняются (пока не показывают вас). Я больше погляжу на то, что вы сделали, и посмотрите, есть ли что-то очевидное. – Richlewis

ответ

0

Я никогда не видел это сообщение об ошибке раньше.

Я собираюсь предположить, что три примера «клонированного клонирования» в вашем примере stackoverflow - это просто ошибка копирования/вставки. Если у вас действительно есть «пятно-клонированный», появляющийся все эти моменты, есть ваша ошибка. Метод unslick() должен удалить все слайды с slick-клонированием как часть процесса. Если он удаляет все слайды, то поэтому слайды имеют значение NULL.

Читайте линию 627 от фактического Js файла, чтобы увидеть, что он делает это: https://github.com/kenwheeler/slick/blob/master/slick/slick.js

8

Я считаю, что способ вызова скользких методов изменился.

Вместо $('.skills_section').unslick();

попробовать $('.skills_section').slick("unslick");

Вы называете также называете это непосредственно внутри гибкой опции в скользкой варианте

+0

спас меня как *** thnks –

0

Использование SetTimeout для инициализации пятна()

function slickCarousel() { 
    setTimeout(function(){ 
    $('.skills_section').slick({ 
    infinite: true, 
    slidesToShow: 3, 
    slidesToScroll: 1 
    }); 
    }, 100); 
} 
Смежные вопросы