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

228
Visualizações
Cada vez que intento la función onclick, aparece un error de referencia

Estoy tratando de usar el evento al hacer clic en mi archivo javascript. Pero, cada vez que lo uso, dice que la función está declarada, pero nunca utilizada. ¿Me pueden ayudar a resolver este problema? Puede consultar el código a continuación, así como en la imagen.

 let showtoDos = () => { let li = ""; if(toDos) { toDos.forEach((todo, id) => { li += `<li class="task"> <label for="${id}"> <input class="clicked" type="checkbox" id="${id}" /> <p>${todo.name}</p> </label> <div class="settings"> <i id="ellipsis" class="fa-solid fa-ellipsis"></i> <ul class="task-menu"> <li><i class="fa-solid fa-pen"></i>Edit</li> <li onclick="deleteTask(${id})" class="delete" ><i class="fa-solid fa-trash"></i>Delete</li> </ul> </div> </li>`; }); } taskBox.innerHTML = li; } showtoDos(); function deleteTask(deletedId) { console.log(deletedId); }

imagen del código en vscode

Además, puede verificar en la imagen a continuación que, cada vez que hago clic en el botón Eliminar en el navegador, aparece un error de referencia.

código en el navegador

about 4 years ago · Santiago Gelvez
2 Respostas
Responde à pergunta

0

Tienes dos problemas diferentes allí:

  1. El IDE está validando su código mostrando advertencias y no puede encontrar ninguna línea que llame a esa función. El único punto al que apuntó esa función es cuando definió el atributo onclick del elemento li pero sucedió dentro de un literal de cadena y no cuenta para el linter. Puedes ignorar esto.
  2. El código javascript que tiene en ese archivo no se ejecutará en el ámbito global, por lo que la función definida allí no será visible para el elemento li cuando se active su evento. Debe intentar adjuntar un controlador de eventos a través de javascript para asegurarse de que el controlador se adjuntará hasta que aún tenga el control de ese alcance.

Justo después de showToDos() puede intentar ejecutar lo siguiente:

 //for each delete list item document.querySelectorAll('li.task ul.task_menu li.delete') .forEach( (o, i) => { //bind an handler (deleteTask) for its click event (deleteTask should be in this scope now) o.addEventListener("click", deleteTask); });

DESCARGO DE RESPONSABILIDAD:

Desafortunadamente, ese selector que usé con querySelectorAll obtendrá TODOS esos elementos, incluso aquellos que ya tienen el controlador adjunto (si ya existía alguno con los mismos criterios de selector). Antes de hacer addEventListener , una estrategia podría ser verificar si ya hay un controlador para ese evento en ese objeto.

Una mejor solución sería usar ese código html que creó con una cadena de plantilla, crear un árbol de elementos html desde allí y llamar a querySelectorAll (+attachEventHandler) desde dicho objeto antes de agregarlo a la caja de tareas. No sería necesario que realice ninguna verificación antes de adjuntar el controlador de eventos porque solo tendrá como objetivo los recién creados.

O podría, como alguien sugirió, hacer que esa función esté disponible en el ámbito global, pero no escalaría muy bien debido a las colisiones de nombres (esta es una de las formas inseguras de hacerlo):

 var deleteTask = (/*args*/) => {/*code here*/}
about 4 years ago · Santiago Gelvez Relatório

0

Debe colocar su función en el ámbito global (objeto de ventana en el navegador) si desea acceder a ella de esa manera, intente:

 window.deleteTask = function (deletedId) { console.log(deletedId); }
about 4 years ago · Santiago Gelvez 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