Javascript事件监听器需要点击两次才能工作

标签 javascript html

因此,当我单击“hartje”部分时,我将触发一个函数。该函数正在获取名为“food-option”的所有类。如果我单击函数触发器,它应该为“最喜欢的数据”提供一个值。它确实给了它一个值,但问题是我必须点击两次才能得到一个值

const foodOption = document.querySelectorAll(".food-option")

function makeFavo() {
  for (var i = 0; i < foodOption.length; i++) {
    foodOption[i].addEventListener("click", e => {

      if (e.path[2].dataset.favorite == "fav") {
        e.path[2].dataset.favorite = ""
        e.path[1].children[0].style.backgroundColor = "gray"
        e.path[1].children[1].style.backgroundColor = "gray"
        e.path[1].style.backgroundColor = "gray"
      } else {
        e.path[2].dataset.favorite = "fav"
        e.path[1].children[0].style.backgroundColor = "red"
        e.path[1].children[1].style.backgroundColor = "red"
        e.path[1].style.backgroundColor = "red"
      }
    })
  }
}
<section data-favorite="" class="food-option">
  <section class="food-picture">
    <figure>
      <img class="picture" src="./Images/vegetarisch-recept-flatbreads-met-falafel-yoghurt-muntsaus2-1585741275.jpg" alt="">
    </figure>
  </section>
  <section class="food-choice">
    <p>falafel</p>
  </section>
  <section class="favo-food">
    <section class="hartje" onclick="makeFavo()">
      <section class="hartje2">
      </section>
      <section class="hartje3">
      </section>
    </section>
  </section>

最佳答案

因为需要两个事件来触发添加data属性的事件监听器。

单击 1,您所做的就是将事件监听器添加到每个食物选项部分。

单击 2,然后您将触发刚刚添加的事件,该事件将添加数据属性。

只需删除函数 makeFavo 和 onclick 触发器,然后将事件监听器添加到食物选项即可。

关于Javascript事件监听器需要点击两次才能工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66664757/

相关文章:

jquery - 如何使 <ul> 充当 <ol> (使用数字而不是元素符号)?

javascript - 通过 Javascript 验证 PHP 变量

javascript - 原生 HTML5 拖放功能在 IE11 中不起作用

html - 将 3D 内容与网站集成有哪些技术?

javascript - 替换 JavaScript 中所有出现的字符串不起作用

javascript - BCE0044 : expecting EOF, 发现 'import'

html - 我想从 svg 文件中提取不同的图标

html - 之前使用伪类对 css 标签进行分组(悬停)

javascript - 自动完成列表在 3 个字符后显示

php - 具有特定功能的 IDE