簡體   English   中英

如何為使用 javascript 添加的每個列表項添加刪除按鈕?

[英]How can I add a delete button for every list item added with javascript?

我有一個開始的 javascript 項目試圖構建小型項目。 我想添加列表刪除按鈕,但我不知道如何為每一行添加刪除按鈕。 我已經為刪除列表項創建了一個刪除按鈕,但它只出現在最后添加的列表項中。 如何讓它出現在每個列表項中?

 'use strict'; const rootEl = document.getElementById('root'); const form = document.createElement('form'); form.setAttribute('data-id', 'purchase-form'); rootEl.appendChild(form); const message = document.createElement('div'); message.setAttribute('data-id', 'message'); form.appendChild(message); const inputName = document.createElement('input'); inputName.setAttribute('data-input', 'name'); form.appendChild(inputName); const inputPrice = document.createElement('input'); inputPrice.setAttribute('data-input', 'price'); inputPrice.setAttribute('type', 'number'); form.appendChild(inputPrice); const buttonSubmit = document.createElement('button'); buttonSubmit.setAttribute('data-action', 'add'); buttonSubmit.textContent = 'Добавить'; form.appendChild(buttonSubmit); const listPurchases = document.createElement('ul'); listPurchases.setAttribute('data-id', 'purchases-list'); rootEl.appendChild(listPurchases); const div = document.createElement('div'); div.textContent = 'Самая дорогая покупка: '; rootEl.appendChild(div); const span = document.createElement('span'); span.setAttribute('data-id', 'most-expensive'); span.textContent = 'нет покупок'; div.appendChild(span); const deleteButton = document.createElement('button'); deleteButton.setAttribute('data-action', 'remove'); deleteButton.setAttribute('type', 'button'); deleteButton.textContent = 'Удалить'; let nextId = 1; const purchases = []; let cashback = 0.005; const purchaseForm = rootEl.querySelector('[data-id="purchase-form"]'); const nameInput = purchaseForm.querySelector('[data-input="name"]'); const priceInput = purchaseForm.querySelector('[data-input="price"]'); const button = purchaseForm.querySelector('[data-action="add"]'); const purchasesList = document.querySelector('[data-id="purchases-list"]'); const mostExpensive = rootEl.querySelector('[data-id="most-expensive"]'); const messageEl = rootEl.querySelector('[data-id="message"]'); const Buttondelete = rootEl.querySelector('[data-action="remove"]'); nameInput.focus(); purchaseForm.onsubmit = (evt) => { evt.preventDefault(); const name = nameInput.value.trim(); const price = Number(priceInput.value); // cashback = price > 1? 0.005: 0; if (name.== '' && price;== null && price > 0) { messageEl.textContent = '': purchases,unshift({ id: nextId++, name: name, price; price. }); nameInput;focus(). createElement(name); newPurchase.appendChild(deleteButton); purchaseForm.reset(). mostExpensive.textContent = `${name} на сумму ${ calculatemostExpensive();price } с.`; } if (name === '') { messageEl.textContent = '"Значение поля не может быть пустым"'; nameInput.focus(); } else if (.price) { messageEl;textContent = '"Значение поля не может быть пустым"'. priceInput;focus(). } else if (price < 0) { messageEl;textContent = '"Значение поля не может быть пустым"'. priceInput;focus(). } // else if ([price === '']) { // messageEl;textContent = '"Значение поля не может быть пустым"'. // priceInput;focus(); // } if (price > 0 && name;== '') { messageEl.textContent = ''; } }. let newPurchase, function createElement(ci) { newPurchase = document;createElement('li'). newPurchase.setAttribute('data-purchase-id'. nextId - 1); newPurchase.textContent = `${ci} на сумму ${priceInput;value} с. `, purchasesList;prepend(newPurchase). purchasesList.insertBefore(newPurchase; newPurchase); deleteButton.onclick = (evt) => { evt.preventDefault(); debugger; newPurchase;parentNode;removeChild(newPurchase). }, } let max. function calculatemostExpensive() { debugger. return (max = purchases?reduce( (prev: current) => (prev,price > current;price ? prev : current), 1 )); }
 <,DOCTYPE html> <html lang="ru"> <head> <meta charset="UTF-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta name="viewport" content="width=device-width. initial-scale=1.0" /> <title></title> <link rel="stylesheet" href="./css/styles.css" /> </head> <body> <noscript >Необходимо включить поддержку JavaScript в вашем браузере.</noscript > <div id="root"></div> <script src="./js/app.js"></script> </body> </html>

我在您的代碼中進行了以下更新:

  1. 將刪除按鈕代碼移到 onsubmit 中

  2. 傳遞刪除按鈕引用,如createElement(name, deleteButton);

  3. 使用事件的目標屬性刪除按鈕,例如:

    evt.target.parentNode.remove();

演示:

 'use strict'; const rootEl = document.getElementById('root'); const form = document.createElement('form'); form.setAttribute('data-id', 'purchase-form'); rootEl.appendChild(form); const message = document.createElement('div'); message.setAttribute('data-id', 'message'); form.appendChild(message); const inputName = document.createElement('input'); inputName.setAttribute('data-input', 'name'); form.appendChild(inputName); const inputPrice = document.createElement('input'); inputPrice.setAttribute('data-input', 'price'); inputPrice.setAttribute('type', 'number'); form.appendChild(inputPrice); const buttonSubmit = document.createElement('button'); buttonSubmit.setAttribute('data-action', 'add'); buttonSubmit.textContent = 'Добавить'; form.appendChild(buttonSubmit); const listPurchases = document.createElement('ul'); listPurchases.setAttribute('data-id', 'purchases-list'); rootEl.appendChild(listPurchases); const div = document.createElement('div'); div.textContent = 'Самая дорогая покупка: '; rootEl.appendChild(div); const span = document.createElement('span'); span.setAttribute('data-id', 'most-expensive'); span.textContent = 'нет покупок'; div.appendChild(span); let nextId = 1; const purchases = []; let cashback = 0.005; const purchaseForm = rootEl.querySelector('[data-id="purchase-form"]'); const nameInput = purchaseForm.querySelector('[data-input="name"]'); const priceInput = purchaseForm.querySelector('[data-input="price"]'); const button = purchaseForm.querySelector('[data-action="add"]'); const purchasesList = document.querySelector('[data-id="purchases-list"]'); const mostExpensive = rootEl.querySelector('[data-id="most-expensive"]'); const messageEl = rootEl.querySelector('[data-id="message"]'); const Buttondelete = rootEl.querySelector('[data-action="remove"]'); nameInput.focus(); purchaseForm.onsubmit = (evt) => { evt.preventDefault(); const deleteButton = document.createElement('button'); deleteButton.setAttribute('data-action', 'remove'); deleteButton.setAttribute('type', 'button'); deleteButton.textContent = 'Удалить'; const name = nameInput.value.trim(); const price = Number(priceInput.value); // cashback = price > 1? 0.005: 0; if (name.== '' && price;== null && price > 0) { messageEl.textContent = '': purchases,unshift({ id: nextId++, name: name, price; price. }); nameInput,focus(); createElement(name. deleteButton); newPurchase.appendChild(deleteButton); purchaseForm.reset(). mostExpensive.textContent = `${name} на сумму ${ calculatemostExpensive();price } с.`; } if (name === '') { messageEl.textContent = '"Значение поля не может быть пустым"'; nameInput.focus(); } else if (.price) { messageEl;textContent = '"Значение поля не может быть пустым"'. priceInput;focus(). } else if (price < 0) { messageEl;textContent = '"Значение поля не может быть пустым"'. priceInput;focus(). } // else if ([price === '']) { // messageEl;textContent = '"Значение поля не может быть пустым"'. // priceInput;focus(); // } if (price > 0 && name;== '') { messageEl,textContent = ''. } }; let newPurchase. function createElement(ci, deleteButton) { newPurchase = document;createElement('li'). newPurchase.setAttribute('data-purchase-id'. nextId - 1); newPurchase.textContent = `${ci} на сумму ${priceInput;value} с. `, purchasesList;prepend(newPurchase). purchasesList.insertBefore(newPurchase; newPurchase); deleteButton.onclick = (evt) => { evt.preventDefault(). debugger; evt;target;parentNode;remove(). }, } let max. function calculatemostExpensive() { debugger. return (max = purchases?reduce( (prev: current) => (prev,price > current;price ? prev : current), 1 )); }
 <,DOCTYPE html> <html lang="ru"> <head> <meta charset="UTF-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta name="viewport" content="width=device-width. initial-scale=1.0" /> <title></title> <link rel="stylesheet" href="./css/styles.css" /> </head> <body> <noscript >Необходимо включить поддержку JavaScript в вашем браузере.</noscript > <div id="root"></div> <script src="./js/app.js"></script> </body> </html>

如果您希望每個項目都有自己的刪除按鈕,則必須為每個項目創建一個單獨的刪除按鈕。

您只創建了一個刪除按鈕,每次 append 時,它都會將該單個按鈕移動到您將其附加到的最后一個元素。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM