无法通过提取 api 将带有选项的选择器添加到 DOM

Can't add selector with options to DOM with fetching api

这是我的第一个问题,所以我有点紧张 ;) 我的问题是,如何将带有选项的选择器添加到 DOM。主要问题是我有 api 来获取数据,应该从这个 api 添加选项的值。一开始我创建按钮来启动该功能,但代码不起作用。这是我的代码:

const btn = document.createElement("button");
btn.setAttribute("id", "getCurrencies");
btn.innerHTML = "Click me!";
document.body.appendChild(btn);

btn.addEventListener("click", (e) => {
  fetch("https://api.frankfurter.app/latest")
    .then((response) => response.json)
    .then((data) => {
      const selectEL = createElement("select");
      const currencies = Object.entries(data.rates).forEach(([code, value]) => {
        const optionEl = createElement("option");
        // optionEl.setAttribute("value", code);
        optionEl.innerHTML = ($[code], $[value]);
        selectEL.appendChild(optionEl);
      });
      document.body.appendChild(selectEL);
    })
    .catch((err) => console.log(err));
});

你应该这样做:

$(document).on('click','#getCurrencies',function(){
 // ...
});

这会将单击事件绑定到文档及其中的所有子元素。此方法称为委托事件处理。

你有多个错误。开始逐段调试您的代码。 如果您首先查看控制台,您将收到错误“ReferenceError: createElement is not defined”

  1. createElement 调用 select 和选项将不起作用,您在文档中缺少创建它们的 WHERE。 document.createElement 与第一行代码中的工作方式相同。

然后你修复这些并得到下一个错误“TypeError:无法将 undefined 或 null 转换为对象”

  1. 您没有调用 response.json()。它不调用函数就不会进行转换。所以它会给出 typeError.

然后修复 json 调用。您现在将收到错误“ReferenceError: $ is not defined”,这意味着 $ 未定义并且转译器不知道该做什么。通过查看您的代码:

  1. 您的 innerHTML 设置有误。您可以使用 es6 字符串 optionEl.innerHTML = ${code} - ${value};

现在开始工作了。

  1. 我会把代码拆分成函数,这样更容易阅读。

所以从头开始调试。删除代码行并阅读控制台为您打印的内容。

查看没有代码拆分的工作示例:https://codepen.io/shnigi/pen/NWvNwXQ