#javascript #html #dom #button #events
#javascript #HTML #dom #кнопка #Мероприятия
Вопрос:
Я создаю список, в который я могу добавлять и удалять элементы. Мне удалось добавить новые элементы, но когда я добавляю функцию к кнопке удаления, это приводит к сбою формы отправки. После того, как я добавил btn.addEventListener("click", runEvent)
form.addEventListener("submit", addItem);
Перестал работать
HTML:
<div class="container">
<div id="main" class="card card-body">
<h2 class="title">Add Items</h2>
<form id="addForm" class="form-inline mb-3">
<input type="text" class="form-control mr-2" id="item">
<input type="submit" class="btn btn-dark" value="Submit">
</form>
<h2 class="title">Items</h2>
<ul id="items" class="list-group">
<li class="list-group-item">Item 1 <button class="btn btn-danger btn-sm float-right delete">X</button></li>
<li class="list-group-item">Item 2 <button class="btn btn-danger btn-sm float-right delete">X</button></li>
<li class="list-group-item">Item 3 <button class="btn btn-danger btn-sm float-right delete">X</button></li>
<li class="list-group-item">Item 4 <button class="btn btn-danger btn-sm float-right delete">X</button></li>
</ul>
</div>
</div>
JS:
let form = document.getElementById("addForm")
let itemList = document.getElementById("items")
let btn = document.getElementsByClassName("btn btn-danger btn-sm float-right delete")
btn.addEventListener("click", runEvent)
function runEvent(event){
event.preventDefault()
console.log("hi")
}
// Form submit event
form.addEventListener("submit", addItem);
// Add item
function addItem(e){
e.preventDefault()
console.log(e)
// Get input value
let newItem = document.getElementById("item").value
// Create new li
let newLI = document.createElement("li")
// Add class
newLI.className = "list-group-item"
// Add text node with input
newLI.textContent = newItem
//Delete button
let button = document.createElement("button")
button.className = "btn btn-danger btn-sm float-right delete"
button.textContent = "X"
newLI.appendChild(button)
itemList.appendChild(newLI)
document.getElementById("item").value = ""
}
Ответ №1:
сначала вам нужно закрыть каждую строку в вашем JS, ;
затем, пока вы выбираете более одного элемента, вам нужно определить, какую кнопку вам нужно использовать с вашим JS, пока вы устанавливаете один и тот же оператор для всех кнопок, поэтому я querySelectorAll()
выбирал все кнопки и использовал цикл for toсо всеми результатами попробуйте фрагмент. желаю вам удачи в достижении ваших целей.
let form = document.getElementById("addForm");
let itemList = document.getElementById("items");
let btn = document.querySelectorAll(".delete");
for (var i =0; i<btn.length ; i ) {
btn[i].addEventListener("click", function runEvent(event){
event.preventDefault();
console.log("hi");
});
}
// Form submit event
form.addEventListener("submit", addItem);
// Add item
function addItem(e){
e.preventDefault();
console.log(e);
// Get input value
let newItem = document.getElementById("item").value;
// Create new li
let newLI = document.createElement("li");
// Add class
newLI.className = "list-group-item";
// Add text node with input
newLI.textContent = newItem;
//Delete button
let button = document.createElement("button");
button.className = "btn btn-danger btn-sm float-right delete";
button.textContent = "X";
newLI.appendChild(button);
itemList.appendChild(newLI);
document.getElementById("item").value = "";
}
<div class="container">
<div id="main" class="card card-body">
<h2 class="title">Add Items</h2>
<form id="addForm" class="form-inline mb-3">
<input type="text" class="form-control mr-2" id="item">
<input type="submit" class="btn btn-dark" value="Submit">
</form>
<h2 class="title">Items</h2>
<ul id="items" class="list-group">
<li class="list-group-item">Item 1 <button class="btn btn-danger btn-sm float-right delete">X</button></li>
<li class="list-group-item">Item 2 <button class="btn btn-danger btn-sm float-right delete">X</button></li>
<li class="list-group-item">Item 3 <button class="btn btn-danger btn-sm float-right delete">X</button></li>
<li class="list-group-item">Item 4 <button class="btn btn-danger btn-sm float-right delete">X</button></li>
</ul>
</div>
Ответ №2:
ответ перед моим хорош и все, но он не может запускать функцию при нажатии кнопки удаления нового добавленного элемента, это произошло потому, что к кнопке добавленного элемента не было добавлено EventListener или onclick. итак, я сделал эту работу.
Я также сделал так, чтобы элемент удалялся при нажатии кнопки удаления.
вы можете запустить фрагмент и проверить
let form = document.getElementById("addForm");
let itemList = document.getElementById("items");
function runEvent(event) {
event.preventDefault();
itemList.removeChild(event.target.parentNode)
};
let btn = document.querySelectorAll(".delete");
for (var i = 0; i < btn.length; i ) {
btn[i].addEventListener("click", () => runEvent(event));
}
// Form submit event
form.addEventListener("submit", addItem);
// Add item
function addItem(e) {
e.preventDefault();
// Get input value
let newItem = document.getElementById("item").value;
// Create new li
let newLI = document.createElement("li");
// Add class
newLI.className = "list-group-item";
// Add text node with input
newLI.textContent = newItem;
//Delete button
let button = document.createElement("button");
button.className = "btn btn-danger btn-sm float-right delete";
button.textContent = "X";
button.addEventListener('click', () => runEvent(event))
newLI.appendChild(button);
itemList.appendChild(newLI);
document.getElementById("item").value = "";
}
<div class="container">
<div id="main" class="card card-body">
<h2 class="title">Add Items</h2>
<form id="addForm" class="form-inline mb-3">
<input type="text" class="form-control mr-2" id="item">
<input type="submit" class="btn btn-dark" value="Submit">
</form>
<h2 class="title">Items</h2>
<ul id="items" class="list-group">
<li class="list-group-item">Item 1 <button class="btn btn-danger btn-sm float-right delete">X</button></li>
<li class="list-group-item">Item 2 <button class="btn btn-danger btn-sm float-right delete">X</button></li>
<li class="list-group-item">Item 3 <button class="btn btn-danger btn-sm float-right delete">X</button></li>
<li class="list-group-item">Item 4 <button class="btn btn-danger btn-sm float-right delete">X</button></li>
</ul>
</div>
надеюсь, это помогло