Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

282
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda