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

111
Vistas
llamar a la función usando onclick dentro de la cadena for loop

Estoy creando una tabla según el resultado de una función para luego agregarla en un div como este:

 let result = document.getElementById("result"); consultCities(); function consultCities (){ consultarAPI(username, password, "cities") .then((response) => { if(response.login !== "Fail"){ let table = ""; let thead = ""; let tbody = ""; thead += `<tr> <th>Citie</th> <th>Dane</th> <th>Look Institution</th> </tr>` for(let i = 0; i < response.data.length; i += 1 ){ tbody += `<tr> <td>${response.data[i].name}</td> <td>${response.data[i].dane}</td> <td><button type="button" id="ver" onclick="${consultInstitutions(response.data[i].dane)}">Ver</button></td> </tr>` } table += `<table class="table table-bordered"> <thead> ${thead} </thead> <tbody> ${tbody} </tbody> </table>` result.innerHTML = table; }else{ alert("El Usuario no existe o la opción no existe"); } }); } function consultInstitutions(codCity){ console.log(codCity); }

El problema es que el disparador onclick se ejecuta automáticamente aunque no hago clic en ningún botón, mi pregunta es ¿hay una mejor manera de configurar onclick en un botón para una cadena?

about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

Creo que el problema aquí es que está ejecutando la función inmediatamente colocándola dentro ${} . En su lugar, solo desea colocar la variable dentro de ${} .

 onclick="consultInstitutions(${response.data[i].dane})"
about 4 years ago · Juan Pablo Isaza Denunciar

0

Aquí hay una versión alternativa de su script. Me tomé la libertad de inventar algunos datos de prueba para convertirlo en un MCVE.

 const D={login:"OK",data:[ {name:"Rome",dane:"Gio"}, {name:"Kiev",dane:"Ivan"}, {name:"Paris",dane:"Lorraine"}, {name:"Ohio",dane:"Matt"}, {name:"Minsk",dane:"Sergey"}]}, tbl = document.getElementById("result"); tbl.innerHTML=makeTable(D); tbl.onclick=ev=>{ if(ev.target.tagName==="BUTTON") console.log(ev.target.closest("td").previousElementSibling.textContent) } function makeTable(resp){ if(resp.login !== "Fail") return `<table class="table table-bordered"><thead><tr><th>Citie</th><th>Dane</th><th>Look Institution</th></tr></thead><tbody>` + resp.data.map(r=> `<tr><td>${r.name}</td><td>${r.dane}</td><td><button type="button">Ver</button></td></tr>`).join("\n") + "</tbody></table>"; else alert("El Usuario no existe o la opción no existe"); }
 <div id="result"></div>

Utilicé un manejo de archivos adjuntos delegado: el elemento <table> escucha el evento de clic, pero la acción solo ocurre si el elemento en el que se hizo clic ( ev.target ) resulta ser un "BOTÓN". En ese caso, la función busca el contenido de texto del elemento <TD> anterior y cinsole.log() lo selecciona. Haciéndolo de esta manera, puedo mantener las cadenas de plantilla HTML en mi función de generador de marcado makeTable() muy simple.

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