Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

285
Vistas
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 Respuestas
Responde la pregunta

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 Denunciar

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 Denunciar

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 Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda