Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

280
Views
I am trying to have a second slider on the same page but its not working

I am trying to have a second slider on the same page but its not working. The first one works fine but the second one is not working. I think there is something wrong with the parent element method but cant wrap my head around it.

var ids = ["view_0", "view_1", "view_2", "view_3"]
let current_id = 0;

function next(productnr) {
  if (document.getElementById(ids[current_id]).parentElement.id == productnr) {
    let last_array_position = ids.length;
    document.getElementById(ids[current_id]).classList.remove("show");
    current_id++;
    if (current_id >= last_array_position) {
      current_id = 0;
    }
    document.getElementById(ids[current_id]).classList.add("show");
  }
}
#1 img {
  display: none;
}

#1 img.show {
  display: block;
}
<article id=1>
    <img class="show" id="view_0"></img>
    <img id="view_1"></img>
    <img id="view_2"></img>
    <img id="view_3"></img>
    <button><</button>
    <button onclick="next(1)">></button>
    <article id=2>
      <img class="show" id="view_0"></img>
      <img id="view_1"></img>
      <img id="view_2"></img>
      <img id="view_3"></img>
      <button><</button>
      <button onclick="next(2)">></button>

about 4 years ago · Juan Pablo Isaza
3 answers
Answer question

0

The reason your code doesn't work is that you are making use of the same id for both sliders in HTML. This will always update the former but never change the latter slide by your JavaScript function. Also, your code has a few issues like the tags aren't closed properly, no src attributes. Looks like you need multiple arrays for storing ids of multiple sliders, and multiple functions to handle previous and next buttons.

Here's a common function to handle all buttons of multiple sliders on a single page without any arrays:

function next(productId, next) {
  var tags = document.getElementById(productId).getElementsByTagName("img");
  var index;
  for (let i = 0; i < tags.length; i++) {
    if (tags[i].className == "show") {
      index = i;
      break;
    }
  }
  tags[index].classList.remove("show")
  index = next ? (index + 1) : (index - 1);
  index = index == tags.length ? 0 : index == -1 ? tags.length - 1 : index;
  tags[index].classList.add("show")
}
img {
  display: none;
  width: 100px;
  height: 100px;
  object-fit: cover;
}

img.show {
  display: block;
}
<div id="product1">
  <img class="show" src="https://cdn.pixabay.com/photo/2015/04/23/22/00/tree-736885__480.jpg" />
  <img src="https://images.ctfassets.net/hrltx12pl8hq/61DiwECVps74bWazF88Cy9/2cc9411d050b8ca50530cf97b3e51c96/Image_Cover.jpg?fit=fill&w=480&h=270" />
  <img src="https://images.unsplash.com/photo-1453728013993-6d66e9c9123a?ixlib=rb-1.2.1&ixid=MnwxMjA3fDB8MHxzZWFyY2h8Mnx8dmlld3xlbnwwfHwwfHw%3D&w=1000&q=80" />
  <img src="https://www.gettyimages.com/gi-resources/images/500px/983794168.jpg" />
  <button onclick="next('product1', 0)">Prev</button>
  <button onclick="next('product1', 1)">Next</button>
</div>

<div id="product2">
  <img class="show" src="https://cdn.pixabay.com/photo/2015/04/23/22/00/tree-736885__480.jpg" />
  <img src="https://images.ctfassets.net/hrltx12pl8hq/61DiwECVps74bWazF88Cy9/2cc9411d050b8ca50530cf97b3e51c96/Image_Cover.jpg?fit=fill&w=480&h=270" />
  <img src="https://images.unsplash.com/photo-1453728013993-6d66e9c9123a?ixlib=rb-1.2.1&ixid=MnwxMjA3fDB8MHxzZWFyY2h8Mnx8dmlld3xlbnwwfHwwfHw%3D&w=1000&q=80" />
  <img src="https://www.gettyimages.com/gi-resources/images/500px/983794168.jpg" />
  <button onclick="next('product2', 0)">Prev</button>
  <button onclick="next('product2', 1)">Next</button>
</div>

about 4 years ago · Juan Pablo Isaza Report

0

For what you are trying to do, I would suggest to use querySelector to select the elements as this will enable us to select exactly the component with the given id under the given slider since there are multiple elements with same id (In such repetitive case, the suggested way is using class instead of id).

  • I am taking a counter_id as counter of image for each slider having the id as the key of the slider.
  • Here, I updated the slider id as a1 and a2 for better understanding.
  • #${productnr}>.show#${ids[current_id[productnr]]} => select the element with class .show and id #view_0 (or so on as per counter_id of the slider) under the the element with id a1 (or a2) i.e. slider element.
  • We perform add and remove class operation on the element.

var ids = ["view_0", "view_1", "view_2", "view_3"]
let current_id = {
  a1: 0,
  a2: 0
}; //image counter for each slider having the id as the key of slider

function next(productnr) {
  let last_array_position = ids.length;
  let pic = document.querySelector(`#${productnr}>.show#${ids[current_id[productnr]]}`);
  pic.classList.remove("show");
  current_id[productnr]++;
  if (current_id[productnr] >= last_array_position) {
    current_id[productnr] = 0;
  }
  document.querySelector(`#${productnr}>#${ids[current_id[productnr]]}`).classList.add("show");
}

function prev(productnr) {
  let last_array_position = ids.length;
  let pic = document.querySelector(`#${productnr}>.show#${ids[current_id[productnr]]}`);
  pic.classList.remove("show");
  current_id[productnr]--;
  if (current_id[productnr] < 0) {
    current_id[productnr] = last_array_position - 1;
  }
  document.querySelector(`#${productnr}>#${ids[current_id[productnr]]}`).classList.add("show");
}
#a1 img {
  display: none;
}

#a1 img.show {
  display: block;
}
<article id="a1">
  <img src="https://picsum.photos/id/1/200" class="show" id="view_0"></img>
  <img src="https://picsum.photos/id/2/200" id="view_1"></img>
  <img src="https://picsum.photos/id/3/200" id="view_2"></img>
  <img src="https://picsum.photos/id/4/200" id="view_3"></img>
  <button onclick="prev(`a1`)"><</button>
  <button onclick="next(`a1`)">></button>
  <article id="a2">
    <img src="https://picsum.photos/id/50/200" class="show" id="view_0"></img>
    <img src="https://picsum.photos/id/60/200" id="view_1"></img>
    <img src="https://picsum.photos/id/70/200" id="view_2"></img>
    <img src="https://picsum.photos/id/80/200" id="view_3"></img>
    <button onclick="prev(`a2`)"><</button>
    <button onclick="next(`a2`)">></button>
  </article>
</article>

about 4 years ago · Juan Pablo Isaza Report

0

The id attribute defines an identifier (ID) which must be unique in the whole document, In your code you are using the same ID for multiple elements,

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!