JavaScript:删除事件监听器

新手上路,请多包涵

我正在尝试删除侦听器定义中的事件侦听器:

canvas.addEventListener('click', function(event) {
    click++;
    if(click == 50) {
        // remove this event listener here!
    }
// More code here ...

我怎么能那样做?这=事件…

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

阅读 664
1 个回答

您需要使用命名函数。

此外, click 变量需要在处理程序之外才能递增。

 var click_count = 0;

function myClick(event) {
    click_count++;
    if(click_count == 50) {
       // to remove
       canvas.removeEventListener('click', myClick);
    }
}

// to add
canvas.addEventListener('click', myClick);


编辑: 您可以像这样关闭 click_counter 变量:

 var myClick = (function( click_count ) {
    var handler = function(event) {
        click_count++;
        if(click_count == 50) {
           // to remove
           canvas.removeEventListener('click', handler);
        }
    };
    return handler;
})( 0 );

// to add
canvas.addEventListener('click', myClick);

这样您就可以增加多个元素的计数器。


如果你不想要那样,并且希望每个人都有自己的柜台,那么这样做:

 var myClick = function( click_count ) {
    var handler = function(event) {
        click_count++;
        if(click_count == 50) {
           // to remove
           canvas.removeEventListener('click', handler);
        }
    };
    return handler;
};

// to add
canvas.addEventListener('click', myClick( 0 ));

编辑: 我忘了命名在最后两个版本中返回的处理程序。固定的。

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

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