Acabei de começar a aprender javascript. Estou criando um aplicativo ToDo. Sempre que clico no botão Adicionar tarefa, o myFunction que criei não está funcionando como deveria. Sempre que o botão é clicado, leva segundos para responder, além da saída no console ser multiplicada. Obrigado antecipadamente. Muito apreciado.
function myFunction() {
// code to be executed when the button is clicked
const taskInput = document.getElementById("taskInput");
const taskList = document.getElementById("taskList");
//const task = taskInput.value.trim();
const myButton = document.getElementById("mButton");
//document.getElementById("taskList").innerHTML = userInput;
myButton.addEventListener("click", function() {
const li = document.createElement("li");
li.createElement = '${taskInput.value} <button class="delete" onclick="deleteTask">Delete</button>';
console.log("I m clicked");
});
}
<script src="script.js"></script>
<div class="container">
<h3>To-Do List</h3>
<input type="text" id="taskInput" placeholder="Enter a task" />
<button id="mButton" onclick="myFunction()">Add Task</button>
<ul id="taskList"></ul>
</div>
O principal problema no seu código é que você chama
myFunction()
quando o botão é clicado, mas ele mesmo define outro manipulador de eventos de clique no mesmo botão. Em vez disso, você precisa executar seu código quando a página carrega .No entanto, existem outros problemas:
`
) para delimitar uma string interpoladainnerHTML
para definir o HTML de um elemento, nãocreateElement()
.append()
o alvoul
para adicionar o queli
você criou a eleli
elementos filhos.Além disso, como uma sugestão adicional para melhor UX, envolva o
input
em umform
elemento e altere o manipulador de eventos para escutar osubmit
evento daquele formulário. Dessa forma, seu novo item será adicionado quando o usuário clicar no botão, mas também quando ele pressionar, Returno que é mais rápido e fácil na maioria dos casos.Aqui está um exemplo prático com essas correções aplicadas:
O
<button>
em si tem umonclick
atributo que significa quemyFunction()
é chamado toda vez que é clicado. EmmyFunction
, você está adicionando outro manipulador de eventos viamyButton.addEventListener
, mas o original ainda está lá, então da próxima vez que você clicar no botão, ambosmyFunction()
e a nova função do manipulador são chamados. AmyFunction
chamada então adiciona outro manipulador de eventos, e assim por diante. Você continua adicionando novos manipuladores de eventos e nunca remove nenhum deles.