Я хочу создать список дел, используя массив и цикл, и отобразить список в контейнере div. Я могу отобразить список, но он умножает тот же список, который хранится и отображается.
<body>
<p class = "title"> Todo List </p>
<input type = "text" class = "js-input-todo" placeholder = "Todo name">
<button type = "submit" class = "js-btn-todo" onclick = "handleAddTodo()">Add</button>
<div class = "todo-list"></div>
<script src = "script/11-arrays-loop.js"></script>
</body>
//script
let names = []
let todoListHTML = ''
function handleAddTodo(){
const todo_input = document.querySelector('.js-input-todo');
const todoValue = todo_input.value
const result = document.querySelector('.todo-list');
names.push(todoValue);
for(let i = 0; i < names.length ; i++){
let todoName = names[i]
const html = `<p>${todoName} </p>`
todoListHTML = html;
result.innerHTML +=todoListHTML;
todo_input.value = '';
}
}
Я хочу, чтобы значение массива не повторялось и не отображалось на выходе.
Поскольку вы используете JavaScript в браузере, вы можете использовать document.createElement для создания узла и использовать textContent вместо InnerHTML. Таким образом, вам не придется очищать вставляемый текст от нежелательного HTML-кода, который может сломать вашу страницу.
const names = [];
const result = document.querySelector(".todo-list");
const todo_input = document.querySelector(".js-input-todo");
function handleAddTodo() {
const todoValue = todo_input.value;
const html = document.createElement("p");
html.innerHTML = todoValue;
result.append(html);
names.push(todoValue);
todo_input.value = "";
console.info(names, "names");
}
Ваш ответ можно улучшить, добавив дополнительную вспомогательную информацию. Пожалуйста, отредактируйте , добавив дополнительную информацию, например цитаты или документацию, чтобы другие могли подтвердить правильность вашего ответа. Более подробную информацию о том, как писать хорошие ответы, вы можете найти в справочном центре.
Попробуй это ,
<!DOCTYPE html>
<html lang = "en">
<head>
</head>
<script>
let names = [];
let todoListHTML = ''
function handleAddTodo(){
const todo_input = document.querySelector('.js-input-todo').value;
const todoValue = todo_input.value
const result = document.querySelector('.todo-list');
names.push(todoValue);
const html = `<p>${todo_input} </p>`
todoListHTML = html;
result.innerHTML +=todoListHTML;
todo_input.value = '';
}
</script>
<body>
<p class = "title"> Todo List </p>
<input type = "text" class = "js-input-todo" placeholder = "Todo name">
<button type = "submit" class = "js-btn-todo" onclick = "handleAddTodo()">Add</button>
<div class = "todo-list"></div>
</body>
</html>
вам нужно сделать этот div пустым перед запуском цикла For.
добавьте этот result.innerHTML = ' ' перед циклом For.
let names = [];
let todoListHTML = ''
function handleAddTodo(){
const todo_input = document.querySelector('.js-input-todo')
const todoValue = todo_input.value
const result = document.querySelector('.todo-list')
result.innerHTML = ''
names.push(todoValue)
for(let i = 0; i < names.length ; i++){
let todoName = names[i]
const html = `<p>${todoName}</p>`
todoListHTML = html
result.innerHTML +=todoListHTML
todo_input.value = ''
}
}
<!DOCTYPE html>
<html lang = "en">
<head>
</head>
<body>
<p class = "title"> Todo List </p>
<input type = "text" class = "js-input-todo" placeholder = "Todo name">
<button type = "submit" class = "js-btn-todo" onclick = "handleAddTodo()">Add</button>
<div class = "todo-list"></div>
</body>
</html>
Судя по вашему коду, я думаю, вы новичок в программировании. я рекомендую вам использовать IDE (против кода) для лучшего форматирования кода.
для этого вам действительно не нужен цикл.
<!DOCTYPE html>
<html lang = "en">
<head>
</head>
<script>
let names = [];
let todoListHTML = ''
function handleAddTodo(){
const todo_input = document.querySelector('.js-input-todo')
const todoValue = todo_input.value
const result = document.querySelector('.todo-list')
names.push(todoValue)
let todoName = names[names.length-1]
const html = `<p>${todoName}</p>`
result.innerHTML +=html
todo_input.value = ''
}
</script>
<body>
<p class = "title"> Todo List </p>
<input type = "text" class = "js-input-todo" placeholder = "Todo name">
<button type = "submit" class = "js-btn-todo" onclick = "handleAddTodo()">Add</button>
<div class = "todo-list"></div>
</body>
</html>
Потому что каждый раз, когда вы добавляете один элемент, вы снова перебираете весь список и добавляете каждый элемент в HTML… Просто не делайте этого?