如何使onclick函数仅执行一次?

Ale*_*lex 20 html javascript dom-events

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

<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>
Run Code Online (Sandbox Code Playgroud)

Nen*_*nad 11

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>
Run Code Online (Sandbox Code Playgroud)

如果您的浏览器不支持该{ 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>
Run Code Online (Sandbox Code Playgroud)


sun*_*sen 7

我建议设置一个变量并检查其值。

<script>
    var clicked = false;
    function klikaj(i) {
        if (clicked === false) {
            gtag('event', 'first-4', {
                'event_category' : 'cat-4',
                'event_label' : 'site'
            });
        }
        clicked = true;
    }
    ...
</script>
Run Code Online (Sandbox Code Playgroud)

或删除其他人建议的onclick事件,

<script>
    function klikaj(i) {
        gtag('event', 'first-4', {
            'event_category' : 'cat-4',
            'event_label' : 'site'
        });
        document.getElementById('thumb0).onclick = undefined;
    }
    ...
</script>
Run Code Online (Sandbox Code Playgroud)

请注意,once: true不幸的是,IE和Edge不支持该功能。参见https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener

  • 最好删除监听器。 (3认同)

小智 7

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

或者您可以让函数返回false,如下所示: document.getElementById('thumb0').onclick = ()=> false