【问题标题】:JS click event triggering twiceJS点击事件触发两次
【发布时间】:2020-11-13 22:48:07
【问题描述】:

在此代码的同一元素上获得两次点击事件,但不使用原因

document.addEventListener('click', function (event) {

        console.log("click");
        
        if (!event.target.closest('.expand')) return;

        console.log("clicked me");

    }, false);

一键式控制台: 点击 x 2 点击了我 x 2

【问题讨论】:

  • 代码缺乏细节。您能否提供更多详细信息,因为从上面的代码中不清楚您面临的问题是什么。
  • 有什么问题?
  • 这里没有太多的上下文,但是这个特定的代码不应该记录两次点击,所以你可能会添加事件(运行这个代码)两次。 console.log('event added') 在添加事件之前查看它是否打印两次。

标签: javascript dom


【解决方案1】:

您可能添加了两次事件侦听器。在document.addEventListener('click', function (event) {之前的行放断点或日志消息

【讨论】:

    【解决方案2】:

    似乎添加以下包装的代码是在内存中添加代码两次事件,尽管它在页面上一次......很奇怪,任何解决这个问题的人都会很酷。

    (window.onload = function () {
      // code here
    })();
    

    【讨论】:

    • 其实并不是加了两次代码。有一种叫做立即调用函数表达式 (IIFE) developer.mozilla.org/en-US/docs/Glossary/IIFE
    • 当然,我明白什么是 iife,但是在这种情况下,事件监听器是如何被添加两次的……也许是另一个疯狂的 JavaScript 怪癖?
    • 你试过没有“iife”吗?可能,即使您没有输入“iife”,您的代码也会执行一次。我不确定。每当您添加事件侦听器时(这里您将事件侦听器添加到 onload 事件),除非您明确删除它,否则它将侦听。
    【解决方案3】:

    如果您的问题是在元素呈现其功能之前对其设置点击两次事件,请使用

    document.addEventListener('dblclick', function (e) { code.... } )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-17
      相关资源
      最近更新 更多