#javascript
Вопрос:
Эта программа предназначена для добавления и удаления элементов из массива. Так было раньше, пока я не попытался добавить проверку ошибок. В настоящее время ни одна из кнопок не работает правильно.
Кнопка Добавить предназначена для проверки наличия повторяющихся записей. Если запись является дубликатом, должно появиться предупреждение. В настоящее время при этом продолжает отображаться предупреждение «Дубликат записи».
Кнопка Удалить предназначена для того, чтобы сначала проверить, есть ли запись в списке, если предупреждение не отображается. Если запись есть в списке, попросите пользователя подтвердить удаление записи. В настоящее время при этом продолжает отображаться предупреждение «Элемента нет в списке».
Наконец, если возможно, как сделать так, чтобы каждый элемент массива отображался в новой строке?
Код:
var groceryList = [];
var groceryitem = document.getElementById('Text1').value;
var description = document.getElementById("groceryinfo");
function Add() {
if (groceryitem != groceryList.includes(groceryitem)) {
groceryList.push(groceryitem);
description.innerText = groceryList.toString();
} else {
alert("Duplicate Entry");
}
}
function Remove() {
if (groceryList.includes(groceryitem)) {
if (confirm("Do you want to delete item")) {
for (var i = 0; i <= groceryList.length; i ) {
if (groceryList[i] == groceryitem) {
groceryList.splice(i, 1);
}
description.innerText = groceryList.toString();
}
} else {
description.innerText = groceryList.toString();
}
} else {
alert("Item not in list");
description.innerText = groceryList.toString();
}
}
My grocery list
<br/>
<br/>
<div id="groceryinfo"></div>
<br/>
<br/>
<input id="Button1" type="button" value="Add this item" onclick="Add()"/>
<input id="Text1" type="text"/>
<br/>
<input id="Button2" type="button" value="Remove this item" onclick="Remove()"/>
Комментарии:
1. Почему бы вам не добавить кнопку «Удалить» (т. Е. X) рядом с каждым элементом списка?
Ответ №1:
Исправлены некоторые проблемы здесь и там. Несколько заметок:
- Вам нужно читать то , что
groceryitem
есть, каждый раз, когда вы звонитеAdd()
илиRemove()
, в противном случае, если вы прочитаете это в первый раз, оно будет""
и никогда больше не будет обновляться. - Чтобы отобразить элементы, вы не можете этого сделать
groceryList.toString()
, ноgroceryList.join(",")
.
если вы хотите, чтобы они были в большем количестве строк, вы можете использоватьdescription.innerHTML = groceryList.join("<br/>");
- Нет необходимости сравнивать ваш товар со списком на
groceryitem != groceryList.includes(groceryitem)
. Все, что вам нужно знать, — это то, нет ли!groceryList.includes(groceryitem)
вашего товара в списке.
var groceryList = [];
var description;
description = document.getElementById("groceryinfo");
function Add() {
var groceryitem = document.getElementById('Text1').value;
if (!groceryList.includes(groceryitem)) {
groceryList.push(groceryitem);
document.getElementById('Text1').value = "";
description.innerHTML = groceryList.join("<br/>");
} else
alert("Duplicate Entry");
}
function Remove() {
var groceryitem = document.getElementById('Text1').value;
if (groceryList.includes(groceryitem)) {
if (confirm("Do you want to delete item")) {
for (var i = 0; i <= groceryList.length; i ) {
if (groceryList[i] == groceryitem) groceryList.splice(i, 1);
description.innerText = groceryList.toString();
}
} else
description.innerText = groceryList.toString();
} else {
alert("Item not in list");
description.innerText = groceryList.toString();
}
}
<body>
My grocery list
<br>
<br>
<div id="groceryinfo"></div>
<br>
<br>
<input id="Button1" type="button" value="Add this item" onclick="Add()" /><input id="Text1" type="text" />
<br>
<input id="Button2" type="button" value="Remove this item" onclick="Remove()" />
Ответ №2:
у вас есть некоторые проблемы в вашем коде, например:
- вы получаете только в первый раз
groceryitem
, это должно быть в области функций, чтобы получать значение каждый раз, когда вы запускаете свою функцию. то же самое относится и к удалению. - вы делаете плохое сравнение , в
groceryitem != groceryList.includes(groceryitem)
основном потомуincludes
, что возвращает логическое значение, и вы сравниваете его со строкой/неопределенным. - функция удаления хороша, но ее можно улучшить, используя
filter
вот так:
if (confirm("Do you want to delete item")) {
groceryList = groceryList.filter(gi => gi !== groceryitem);
description.innerText = groceryList.toString();
}
ниже вы можете найти снипет с полностью работающим вашим кодом.
var groceryList = [];
var groceryitem;
var description;
description = document.getElementById("groceryinfo");
function Add() {
groceryitem = document.getElementById('Text1').value;
if (!groceryList.includes(groceryitem)) {
groceryList.push(groceryitem);
description.innerText = groceryList.toString();
} else
alert("Duplicate Entry");
}
function Remove() {
groceryitem = document.getElementById('Text1').value;
if (groceryList.includes(groceryitem)) {
if (confirm("Do you want to delete item")) {
groceryList = groceryList.filter(gi => gi !== groceryitem);
description.innerText = groceryList.toString();
}
} else {
alert("Item not in list");
description.innerText = groceryList.toString();
}
}
<body>
My grocery list
<br>
<br>
<div id="groceryinfo"></div>
<br>
<br>
<input id="Button1" type="button" value="Add this item" onclick="Add()" /><input id="Text1" type="text" />
<br>
<input id="Button2" type="button" value="Remove this item" onclick="Remove()" />
<script>
</script>