Не могу очистить поле ввода

Я создаю отфильтрованную таблицу в 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>

Как вы ожидаете, что любые изменения вашей переменной повлияют на ваш HTML?

Krishna Prashatt 10.05.2019 11:09
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
1
54
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Переменная inputValue содержит только фактическое значение поля, она отделена от него.

Вы можете сохранить ссылку на поле как переменную и очистить значение следующим образом:

const inp = document.querySelector('.form__input');
inp.value = '';

@Bart Пожалуйста, примите ответ, чтобы дать понять, что на ваш вопрос дан ответ.

ttulka 10.05.2019 11:16
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?

Krishna Prashatt 10.05.2019 11:11

Другие вопросы по теме