javascript - 如何让onclick函数只执行一次?

标签 javascript html dom-events

<分区>

我在一个按钮上有这个用于谷歌分析的代码。我需要它只执行一次,这样用户就不能通过多次按下按钮来更改统计信息。我尝试了类似主题的解决方案,但它们不起作用。请帮忙。这是我的代码。

<script>
    function klikaj(i) {
        gtag('event', 'first-4', {
            'event_category' : 'cat-4',
            'event_label' : 'site'
        });
    }

    document.body.addEventListener("click", klikaj(i), {once:true})
</script>


<div id="thumb0" class="thumbs" onclick="klikaj('rad1')">My button</div>

最佳答案

删除按钮上的 onclick 属性并通过 JavaScript 注册监听器,就像您尝试做的那样:

<div id="thumb0" class="thumbs"
  style="border: 1px solid; cursor: pointer; float: left">
    My button
</div>
<script>
    function klikaj(i) {
        console.log(i);
    }
    document.getElementById('thumb0')
        .addEventListener("click", function(event) {
            klikaj('rad1');
        }, {once: true});
</script>

如果您的浏览器不支持{ once: true } 选项,您可以手动删除事件监听器:

<div id="thumb0" class="thumbs"
  style="border: 1px solid;cursor: pointer;float:left">
    My button
</div>

<script>
    function klikaj(i) {
        console.log(i);
    }
    function onClick(event) {
      klikaj('rad1');
      document
        .getElementById('thumb0')
        .removeEventListener("click", onClick);
    }
    
    document
      .getElementById('thumb0')
      .addEventListener("click", onClick);
</script>

关于javascript - 如何让onclick函数只执行一次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57641554/

相关文章:

php - foreach 结果在同一行

javascript - 正确使用onmousemove

wordpress - Youtube 视频结束时捕获的 Javascript 事件

javascript - 是否可以在不破坏后代事件监听器的情况下附加到 innerHTML?

javascript - 单击下拉按钮时使区域缩小的任何选项

jquery - 更改 ckeditor4 的编辑器内容

html - 为什么 IE 无法读取 CSS 样式表?

javascript - 为什么在 Angular 中传递 $event(在处理 DOM 事件时)是一种可疑的做法

javascript - 尝试更新文档时出现错误 "user.save is not a function"

javascript - Vue ToDo List,点击按钮的Target父数组列表项