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

433
Visualizações
addEventListener a una matriz de botones usando un bucle for

Estoy tratando de hacer una serie de botones (en el div incluido en el html) que dan una alerta cuando se hace clic. Para eso estoy usando addEventListener. Si solo hago una lista (como se muestra a continuación comentada), el resultado está bien. Trato de hacer que el código se SECO usando un bucle for, pero solo me devuelve que "hizo clic en 8" sin importar lo que presione. Según tengo entendido, el flujo debe comenzar probando i = 0 y continuar con los demás de la misma manera que con la lista completa. Entonces, si presiono el botón [0], debería hacer "clic 1" y eso es todo porque las otras condiciones son falsas. Gracias por adelantado.

 // document.querySelectorAll("button")[0].addEventListener("click", function(){alert("clicked 1")}); // document.querySelectorAll("button")[1].addEventListener("click", function(){alert("clicked 2")}); // document.querySelectorAll("button")[2].addEventListener("click", function(){alert("clicked 3")}); // document.querySelectorAll("button")[3].addEventListener("click", function(){alert("clicked 4")}); // document.querySelectorAll("button")[4].addEventListener("click", function(){alert("clicked 5")}); // document.querySelectorAll("button")[5].addEventListener("click", function(){alert("clicked 6")}); // document.querySelectorAll("button")[6].addEventListener("click", function(){alert("clicked 7")}); for(i=0; i<=6; i++) { document.querySelectorAll("button")[i].addEventListener("click", function(){alert("clicked " + (i+1))}); }
 <div class="set"> <button class="w drum">w</button> <button class="a drum">a</button> <button class="s drum">s</button> <button class="d drum">d</button> <button class="j drum">j</button> <button class="k drum">k</button> <button class="l drum">l</button> </div>

about 4 years ago · Juan Pablo Isaza
3 Respostas
Responde à pergunta

0

Su problema proviene del comportamiento de usar la palabra clave var para definir la variable.

En ES6 se introdujeron las palabras clave let y const . Si los usa, dejará de enfrentar problemas de elevación y alcance de var .

Entonces, puede agregar una palabra clave let a su declaración i como esta:

 for (let i=0; i<=6; i++) { //the rest of the code }

Puedes leer más en estapregunta .

Breve resumen de la pregunta vinculada en su problema

Cuando escribes i = 0 estás definiendo la propiedad i en el objeto window . Luego, en bucle, está incrementando este valor. Cuando se usa i en la función pasada, javascript obtiene el valor del objeto de la window .

Por otro lado, la palabra clave let define el alcance de la variable al alcance de su bucle, por lo que la función pasada siempre contiene una copia del valor, cuando se pasó la función.

about 4 years ago · Juan Pablo Isaza Relatório

0

Parece que la función realiza un seguimiento del valor de I incluso después del ciclo. Agregue otra variable y vincúlela a la alerta.

 // document.querySelectorAll("button")[0].addEventListener("click", function(){alert("clicked 1")}); // document.querySelectorAll("button")[1].addEventListener("click", function(){alert("clicked 2")}); // document.querySelectorAll("button")[2].addEventListener("click", function(){alert("clicked 3")}); // document.querySelectorAll("button")[3].addEventListener("click", function(){alert("clicked 4")}); // document.querySelectorAll("button")[4].addEventListener("click", function(){alert("clicked 5")}); // document.querySelectorAll("button")[5].addEventListener("click", function(){alert("clicked 6")}); // document.querySelectorAll("button")[6].addEventListener("click", function(){alert("clicked 7")}); for(var i=0;i<7; i++) { let out = i+1 document.getElementsByTagName("button")[i].addEventListener("click", function(){alert("clicked " + (out))}); }
 <div class="set"> <button class="w drum">w</button> <button class="a drum">a</button> <button class="s drum">s</button> <button class="d drum">d</button> <button class="j drum">j</button> <button class="k drum">k</button> <button class="l drum">l</button> </div>

about 4 years ago · Juan Pablo Isaza Relatório

0

puedes secar tu código de esta manera:

 document.querySelectorAll('button').forEach((el, i) => { el.addEventListener('click', () => alert(`clicked ${i+1}`)) } )
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