【发布时间】:2019-05-01 18:22:52
【问题描述】:
希望能够点击图像并使用与点击的海报匹配的 imdbID 显示来自第二次 fetch 调用的数据。
我正在尝试将电影海报打印到页面上 - 然后电影海报将是可点击的 - 点击后它们将在 div(“信息”)中显示导演、演员和年份信息。
我不知道如何让所有图像对点击事件做出反应。 (我认为这是因为 img id,但如果我按类获取图像,我无法让代码工作)。我可以从第二次获取中获取数据,但它仅适用于第一张海报和最后一张图片中的数据。 (第一张海报也是唯一可以点击的。
这里的代码沙盒:https://codesandbox.io/s/1ojvormxn7
我可以通过控制台记录第二次调用的数据,但它与图像不匹配,我不确定如何在需要的地方打印它。
document.getElementById("searchButton").addEventListener("click", () => {
const inputSearch = document.getElementById("searchInput").value;
//console.log(inputSearch);
fetch(`https://www.omdbapi.com/?apikey=d2d93339&s=${inputSearch}`)
.then(response => response.json())
.then(data => {
console.log(data);
let posterImage = "";
let imdb = "";
data.Search.map(results => {
//console.log(results.Poster);
return (
(posterImage += `<img id="resultPic" class="resultPic" src="${
results.Poster
}">`) && (imdb = results.imdbID)
);
});
document.getElementById("app").innerHTML = posterImage;
document
.getElementById("resultPic")
.addEventListener("click", getInfo => {
fetch(`https://www.omdbapi.com/?apikey=d2d93339&i=${imdb}`)
.then(response => response.json())
.then(data => {
console.log(data);
});
});
});
});
【问题讨论】:
-
大声笑...我的回答已被版主删除。酷。
-
哥们刚进来就一言不发地删除了我的帖子,没有解释就离开了。
-
return ( (posterImage +=
<img id="resultPic" class="resultPic" src="${ results.Poster }">) && (imdb = results.imdbID) );你到底想在这里做什么?因为它在我看来就像您:将图像的 HTML 添加到您正在构建的此 posterImage 字符串中。分配 imdb = results.imdbID。用 && 将这两个看似无关的操作的结果放在一个布尔表达式中。尤其是最后一点让我感到困惑。你为什么这样做? -
要检查的另一件事:imdb 变量。每次进行映射迭代时,您都会为其分配一个值,但您会在下一次迭代中覆盖它。所以在所有map迭代结束时,它只会有data.Search中最后一项的值。这是你的意图吗?
-
调用 map 函数并丢弃结果也很奇怪。看看这里的描述developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…“map() 方法创建一个新数组,其结果是在调用数组中的每个元素上调用提供的函数。”使用它而不是像 forEach 或 for 这样的简单交互是没有意义的,除非您使用的是它为您构建的结果。
标签: javascript fetch-api omdbapi