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

新手上路,请多包涵

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

 <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>

原文由 Alex 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 587
2 个回答

你可以像这样使用 removeAttribute()document.getElementById('thumb0').removeAttribute("onclick");

或者您可以让函数像这样返回 false: document.getElementById('thumb0').onclick = ()=> false

原文由 med morad 发布,翻译遵循 CC BY-SA 4.0 许可协议

删除按钮上的 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>

原文由 Nenad 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题