Reputation: 55
I am using Unslider and I have multiple sliders on a page - all with the same class of slider. The sliders work if navigating via the dots - but the next and prev buttons don't work. When there is only one slider on the page and i run console.log
$('.slider').each(function(){
var data = $slider.data('unslider');
console.log(data);
});
I get 'Unslider'
If there are multiple sliders on the page I get 'undefined' and when clicking 'next' or 'prev'
$('.unslider-arrow').click(function(){
event.preventDefault();
if ($(this).hasClass('next')) {
$slider.data('unslider')['next']();
} else {
$slider.data('unslider')['prev']();
};
});
Uncaught TypeError: Cannot read property 'next' of undefined Uncaught TypeError: Cannot read property 'prev' of undefined
I am assuming it has to do with the way I am writing this:
var data = $slider.data('unslider');
Can someone please help? I am not a js expert so I think it might be an easy solve.
My html is pretty basic, as required.
<div class="slider">
<ul>
<li style="background-image:url(/assets/img/slide-test-3.jpg);">
<span class="caption">Slide 1</span>
</li>
<li style="background-image:url(/assets/img/slide-test-1.jpg);">
<span class="caption">Slide 2</span>
</li>
<li style="background-image:url(/assets/img/slide-test-2.jpg);">
<span class="caption">Slide 3</span>
</li>
</ul>
<a href="#" class="unslider-arrow prev ss-icon ss-gizmo">Previous</a>
<a href="#" class="unslider-arrow next ss-icon ss-gizmo">Next</a>
</div>
<div class="slider">
<ul>
<li style="background-image:url(/assets/img/slide-test-3.jpg);">
<span class="caption">Slide 1</span>
</li>
<li style="background-image:url(/assets/img/slide-test-1.jpg);">
<span class="caption">Slide 2</span>
</li>
<li style="background-image:url(/assets/img/slide-test-2.jpg);">
<span class="caption">Slide 3</span>
</li>
</ul>
<a href="#" class="unslider-arrow prev ss-icon ss-gizmo">Previous</a>
<a href="#" class="unslider-arrow next ss-icon ss-gizmo">Next</a>
</div>
Upvotes: 0
Views: 2037
Reputation: 4167
Above solution didn't work for me on multiple slider, this one did
$(document).ready(function (){
$('.slider').each(function(){
var $this = $(this);
$this.unslider({
speed : 300,
delay : 10000,
complete : function () {},
keys : false,
dots : true,
fluid : true
}).find('.unslider-arrow').click(function(event){
event.preventDefault();
if ($(this).hasClass('next')) {
$this.data('unslider').next();
} else {
$this.data('unslider').prev();
}
});
});
});
Upvotes: 0
Reputation: 1038
You should init arrows withing the each
function:
$('.slider').each(function(){
var $slider = $(this).unslider();
$(this).find('.unslider-arrow').click(function(event){
event.preventDefault();
if ($(this).hasClass('next')) {
$slider.data('unslider')['next']();
} else {
$slider.data('unslider')['prev']();
};
});
});
Upvotes: 3