javascript - 这些值不会被新值替换
问题描述
首先,当我搜索任何城市时,它会正确显示天气,但是当我尝试搜索另一个城市/国家时,它会显示我之前搜索过的同一个城市的详细信息。我认为我的 JavaScript 代码有问题。我认为我从 API 获取的新值不会被旧值取代。
let enterCity = document.querySelector("#enterCity");
let city = document.querySelector(".city");
let country = document.querySelector(".country");
let temp = document.querySelector(".temp");
let text = document.querySelector(".text");
let inputVal = enterCity.value;
// the base url
let url = `http://api.weatherapi.com/v1/current.json?q=${inputVal}&key=cb58be19d0d2****************`;
fetch(url).then((response) => {
return response.json();
}).then((data) => {
let search = document.querySelector(".search");
search.addEventListener("click", () => {
let container = document.querySelector(".container");
card = document.createElement("div");
card.className = "card";
city = document.createElement("h2");
city.className = "city";
***问题出在下面的 innerText ***
city.innerText = data.location.name;
country = document.createElement("h5");
country.className = "country";
country.innerText = data.location.country;
temp = document.createElement("h4");
temp.className = "temp";
temp.innerText = data.current.temp_c;
span1 = document.createElement("span");
span1.id = "deg";
span1.innerText = "°C"
temp.appendChild(span1);
icon = document.createElement("img");
icon.className = "icon";
icon.src = data.current.condition.icon;
text = document.createElement("h3");
text.className = "text";
text.innerText = data.current.condition.text;
card.appendChild(city);
card.appendChild(country);
card.appendChild(temp);
card.appendChild(icon);
card.appendChild(text);
container.appendChild(card);
在这里,我还清除了我从用户那里获取的输入值
enterCity.value = "";
});
});
解决方案
发生这种情况是因为您没有在输入(输入城市)上添加 onchange 事件侦听器。如果您不添加 onchange 事件,这将只取您的初始值。
所以添加一个 onchange 监听器,然后在其中调用 fetch api。
虚拟示例 -
let entercity=document.querySelector("#entercity");
entercity.addEventListener('change',()=>{
let inputVal=entercity.value;
let url = `http://api.weatherapi.com/v1/current.json?q=${inputVal}&key=cb58be19d0d2476da35134140211107`;
fetch(url).then((res)=>console.log(res))
.catch((err)=>console.log(err));
})
推荐阅读
- regex - reg-expression : 与 \t \n \r 的单词边界
- python - 如何在不显示 dtype 的情况下从对象打印 Python?
- python - 将表单数据写入 SQLLite 数据库
- kendo-ui - 视图组件可以在父页面中渲染后通过 ajax 调用自己的方法吗?
- android - 如何使用分配的另一个参数值调用相同的片段?
- python - 如何防止用户通过 pip 安装包
- git - 如何将 maven 子模块添加到 .gitignore
- r - Power BI 中的 R 脚本
- nginx - nginx 重写保留 CGI 查询参数(带有哈希锚)
- java - Spring Data with JPA 2.2 resultStream 到 Kotlin 的流