Добавьте прослушиватель событий submit
к элементу form
вместо кнопки напрямую. Это даст вам возможность извлечь все значения элементов формы из вашей формы с помощью FormData API
.
. Убедитесь, что ваши поля input
имеют атрибут name
как мы будем использовать это для получения необходимых значений.
<form class="weatherdata-form">
<input class="search-placholder" type="text" name="city-name"/>
<button type="submit">Submit</button>
</form>
// Get the form element.
const formEl = document.querySelector('form.weatherdata-form');
Измените вашу функцию getWeatherdata
, чтобы извлечь свойство target
текущего события. Это даст нам информацию, какая форма была представлена. Это открывает возможность сделать эту функцию применимой к другим формам.
Создайте экземпляр FormData
с аргументом form
для извлечения ваших входных данных с их именами и значениями. С помощью метода FormData.get()
вы можете выбрать одно значение из формы, указав его имя. Вставьте это значение в строку URL-адреса, и все готово.
Редактировать
Константа form
имеет неопределенное значение и должна была быть event.target
; Форма не найдена, и поэтому значения не найдены. Я также добавил проверку, что если cityName
- пустая строка, она остановит функцию и не вызовет fetch
. Удалите оператор if
, если хотите вызвать fetch
без условий.
async function getWeatherdata(event) {
const form = event.target;
const formData = new FormData(form);
const cityName = formData.get('city-name');
if (cityName === '') return;
event.preventDefault();
const url = `http://api.openweathermap.org/data/2.5/weather?q=${cityName}&appid=2489ed561dc99d173a2f394574bc107e`;
const response = await fetch(url);
const json = await response.json();
console.log(json);
}
Добавьте прослушиватель событий в элемент формы и установите обратный вызов слушателя непосредственно для функции getWeatherdata
. Теперь форма отправит событие и откроет все значения формы для использования.
formEl.addEventListener('submit', getWeatherdata);
Надеюсь, это поможет вам, друг. Если это не помогло решить ваш вопрос или у вас есть другие вопросы, пожалуйста, дайте мне знать.
Ура!