当前位置: 首页 > 知识库问答 >
问题:

javascript - 为什么addeventListener()事件失效?

单于正业
2024-07-01

为什么点击事件函数只能执行一次?

const dataArr = [

  {
    id: 1,
    icon: 'http://autumnfish.cn/static/火龙果.png',
    isChecked: true,
    num: 2,
    price: 6,
  },
  {
    id: 2,
    icon: 'http://autumnfish.cn/static/荔枝.png',
    isChecked: false,
    num: 7,
    price: 20,
  },
  {
    id: 3,
    icon: 'http://autumnfish.cn/static/榴莲.png',
    isChecked: false,
    num: 3,
    price: 40,
  },
  {
    id: 4,
    icon: 'http://autumnfish.cn/static/鸭梨.png',
    isChecked: true,
    num: 10,
    price: 3,
  },
  {
    id: 5,
    icon: 'http://autumnfish.cn/static/樱桃.png',
    isChecked: false,
    num: 20,
    price: 34,
  },
]

// 个数添加功能

const jia = document.querySelectorAll('.increase')
const jian = document.querySelectorAll('.decrease')
for (let i = 0; i < jia.length; i++) {
  jia[i].addEventListener('click', function () {
    console.log(123)
    dataArr[i].num++
    render(dataArr)
    // console.log(arr2)
    // render(arr2)
  })
}

以上代码我运行的时候,第一次是能执行的,功能也是正常,但是再次点击后没有反应了?也没有报错。

我以为是通过for循环多次绑定事件有问题,但是只对一个标签绑定事件也只能执行一次。

我查询过答案,得到一个类似的答案,说是通过innerHTml实现会让页面重新渲染Dom元素,我的代码也会进行一次数据处理然后重新渲染?是这个问题导致的绑定事件失效了吗?求解答。

共有1个答案

海宁
2024-07-01

查到的答案没问题,innerHtml会把当前元素的内容替换为新的内容,而点击事件绑定也会随着替换而销毁,只有在替换后重新绑定才生效。

所以,一般这种场景建议用事件委托方式,在希望通过innerHtml替换内容的元素父节点上绑定点击事件,通过事件回调函数里面的传入的参数event.target, 判断是点击了➕ 还是➖。

 类似资料:
  • 问题内容: 当我运行以下脚本时,该事件总是在页面加载时触发。我不确定在这里做错了什么,我创建了元素,在DOM中找到它,然后附加了一个侦听器,但是它总是在页面加载时触发事件,而不是在单击元素时触发事件。 问题答案: el.addEventListener(“click”, alert(“clicktrack”), false); 执行此行后,将调用并返回。要传递警报代码,您需要将其包装在一个函数中。

  • 问题内容: 谁能用JavaScript解释事件委托,它有什么用? 问题答案: DOM事件委派是一种机制,它通过事件“冒泡”(也称为事件传播)的魔术,通过单个公共父节点而不是每个子节点来响应ui事件。 在元素上触发事件时,将发生以下情况: 事件被调度到其目标,并且在该目标中 找到的所有事件侦听器都会被触发。 然后,冒泡事件将触发所有其他事件侦听器,这些事件侦听器可通过向上跟随父链来查找在每个连续上注

  • 本文向大家介绍什么是JavaScript中的onmousedown事件?,包括了什么是JavaScript中的onmousedown事件?的使用技巧和注意事项,需要的朋友参考一下 按下鼠标按钮时会触发onmousedown事件。 示例 您可以尝试运行以下代码以了解如何使用JavaScript中的onmousedown事件-

  • 本文向大家介绍什么是JavaScript中的onmouseover事件?,包括了什么是JavaScript中的onmouseover事件?的使用技巧和注意事项,需要的朋友参考一下 的onmouseover 事件触发时在一个元素上鼠标指针移动。 示例 您可以尝试运行以下代码以了解如何在JavaScript中使用onmouseover 事件-

  • 本文向大家介绍什么是JavaScript中的onmouseout事件?,包括了什么是JavaScript中的onmouseout事件?的使用技巧和注意事项,需要的朋友参考一下 当鼠标指针移出元素时,将触发此事件。 示例 您可以尝试运行以下代码以了解如何在JavaScript中使用onmouseout事件-

  • 本文向大家介绍JavaScript使用addEventListener添加事件监听用法实例,包括了JavaScript使用addEventListener添加事件监听用法实例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了JavaScript使用addEventListener添加事件监听用法。分享给大家供大家参考。具体实现方法如下: 希望本文所述对大家的javascript程序设计有所帮

  • 问题内容: 和之间有什么区别? 上面的代码一起驻留在单独的.js文件中,并且它们都可以正常工作。 问题答案: 两种方法都是正确的,但是它们本身都不是“最佳”的,并且开发人员选择使用这两种方法可能是有原因的。 事件监听器(addEventListener和IE的attachEvent) Internet Explorer的早期版本与几乎所有其他浏览器都不同地实现javascript。对于小于9的版本