【问题标题】:Creating a simple web using the pokemon tcg api使用 pokemon tcg api 创建一个简单的 web
【发布时间】:2021-05-22 03:10:41
【问题描述】:

我们正在尝试根据口袋妖怪不同的卡片生成选择选项,它们的值是那一代卡片的图像,然后我们希望事件侦听器检查我们的点击,该点击获取值并更改照片。

我遇到的问题是我试图访问嵌套在我的条件中的选项的本地变量,我似乎无法弄清楚如何访问它,所以我可以让事件侦听器按照我的方式工作打算这样做。

代码:

document.querySelector('#form').addEventListener('submit', getPokemon)

const img = document.querySelector('#img')
const sel = document.querySelector('#curPoke')

function getPokemon(e) {
    e.preventDefault();
    const poke = document.querySelector('#input').value.toLowerCase();
    const url = `https://api.pokemontcg.io/v2/cards`;

    fetch(url)
        .then((res) => res.json())
        .then((data) => {
            data.data.forEach(card => {
                if (poke === card.name.toLowerCase()) {
                    let option = document.createElement('option')

                    option.textContent = `${card.name} ${card.id}`

                    option.value = card.images.large;
                    option.classList.add('gen')
                    sel.append(option)
                    sel.classList.remove('hide')

                    img.src = option.value
                }
                console.log(img.src)
            })
            console.log(data)
        }).catch((err) => console.log(err))
}

document.querySelector('option').addEventListener('click', function() {
    img.src = option.value
})

sel.addEventListener('click', function() {
    // img.src = option.value
    console.log('click')
    const opt = document.querySelector('.gen')
    console.log(opt)
})

【问题讨论】:

  • 控制台有异常吗?如果是这样,你能把它放在你的问题中吗?
  • 不,我只是记录下来,这样我就可以直观地了解我的应用正在做什么,以确保它以我想要的方式工作。

标签: javascript api local-variables createelement


【解决方案1】:

你需要放

option.addEventListener('click', function(){
    img.src = option.value;
});

进入这样的条件:

fetch(url)
        .then((res) => res.json())
        .then((data) => {
            data.data.forEach(card => {
                if (poke.toLowerCase() === card.name.toLowerCase()) {
                    let option = document.createElement('option');
                    option.textContent = `${card.name} ${card.id}`;
                    option.value = card.images.large;
                    option.classList.add('gen');
                    sel.append(option);
                    sel.classList.remove('hide');
                    img.src = option.value;

                    option.addEventListener('click', function () {
                        img.src = option.value;
                        console.log(img.src);
                    });
                }
               
            });
            console.log(data);
        }).catch((err) => console.log(err));

还要注意poke.toLowerCase() === card.name.toLowerCase() 条件。这样,如果用户使用大写字母输入名称,您将防止找不到口袋妖怪的情况。

【讨论】:

  • ok lemme try this 我尝试了这个版本,但它似乎不起作用,也许我遗漏了一些东西,但非常感谢。
  • 好的,所以我尝试过,问题是,当所有选项都设置好时,它只读取第一个选项,即使在其他代卡上滑动时,并且在功能之外它没有t 似乎工作正常有没有办法抓住我在那个条件之外制作的本地 const 选项变量?
  • 我修复了答案中的代码应该是option.addEventListener 而不是document.querySelector('option').addEventListener 现在它应该可以工作了,但是通过单击“sel”元素触发的事件也会被触发
  • 是的,我也尝试过,但它似乎没有工作我将尝试再次点击绘图板,选项事件侦听器仅返回我创建的第一个选项,而不是其他选项,非常感谢您到目前为止的回复。
  • 我还为您创建了一个可用的 codepen 示例,其中还包含一些 html 元素,链接如下:codepen.io/Tensoniusz/pen/KKNvWqB?editors=1111
猜你喜欢
  • 2022-01-27
  • 2017-02-19
  • 2018-09-23
  • 2018-09-13
  • 2022-11-06
  • 2016-12-16
  • 2015-05-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多