Я создаю отфильтрованную таблицу в JavaScript. Все хорошо. Однако единственная строка, которая, похоже, не работает, — это inputValue = ''. Не уверен, почему это не хочет очищать поле после завершения фильтрации.
Если вы замените это на document.querySelector('.form__input').value, все будет работать, но я не хочу повторять один и тот же код. Я уже объявил это выше как inputValue.
const initValues = [
'Walmart',
'State Grid',
'Sinopec Group',
'China National Petrolium',
'Royal Dutch Shell',
'Toyota Motor',
'Volkswagen',
'BP',
'Exxon Mobil',
'Berkshire Hathaway'
];
const tableCreation = array => {
const tableBody = document.querySelector('.table__body');
document.querySelectorAll('tr').forEach(el => el.parentNode.removeChild(el));
array.forEach(el => {
const row = document.createElement('tr');
const cell = document.createElement('td');
const cellText = document.createTextNode(el);
cell.appendChild(cellText);
row.appendChild(cell);
tableBody.appendChild(row);
});
};
tableCreation(initValues);
const filterTable = event => {
event.preventDefault();
let inputValue = document.querySelector('.form__input').value;
const filtered = initValues.filter(el => el.toLowerCase().includes(inputValue.toLowerCase()));
if (filtered) {
inputValue ? tableCreation(filtered) : tableCreation(initValues);
}
inputValue = '';
};
document.querySelector('.form__button').addEventListener('click', filterTable);<!DOCTYPE html>
<html lang = "en">
<head>
<meta charset = "UTF-8">
<meta name = "viewport" content = "width=device-width, initial-scale=1.0">
<meta http-equiv = "X-UA-Compatible" content = "ie=edge">
<link rel = "stylesheet" href = "./css/3.css">
<title>Filtered list</title>
</head>
<body>
<form class = "form" id = "form">
<label for = "filter">Filtered: </label>
<input class = "form__input" type = "text" id = "filter" name = "input" placeholder = "Insert phrase...">
<button class = "form__button" form = "form" type = "submit">Filter</button>
</form>
<table class = "table">
<tbody class = "table__body"></tbody>
</table>
<script src = "./js/3.js"></script>
</body>
</html>


![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Переменная inputValue содержит только фактическое значение поля, она отделена от него.
Вы можете сохранить ссылку на поле как переменную и очистить значение следующим образом:
const inp = document.querySelector('.form__input');
inp.value = '';
@Bart Пожалуйста, примите ответ, чтобы дать понять, что на ваш вопрос дан ответ.
let inputValue = document.querySelector('.form__input').value;
эта строка возвращает строковое значение ввода.
Когда вы пытаетесь inputValue = '';, вы меняете только значение переменной inputValue, но не поля ввода.
для этого просто сохраните поле как переменную вместо его значения, а затем измените его значение:
let inputField = document.querySelector('.form__input');
const filtered = initValues.filter(el => el.toLowerCase().includes(inputValue.toLowerCase()));
if (filtered) {
inputValue ? tableCreation(filtered) : tableCreation(initValues);
}
inputField.value = '';
Вы уже получаете значение только из inputvalue., но вы не можете изменить это значение, поэтому получить экземпляр dom также пожалуйста, измените этот код на
const filterTable = event => {
event.preventDefault();
let inputElement = document.querySelector('.form__input'),
inputValue = inputElement.value;
const filtered = initValues.filter(el => el.toLowerCase().includes(inputValue.toLowerCase()));
if (filtered) {
inputValue ? tableCreation(filtered) : tableCreation(initValues);
}
inputElement.value = '';
};
Что такое .value?
Как вы ожидаете, что любые изменения вашей переменной повлияют на ваш HTML?