将唯一标识符附加到具有多个事件的对象单击事件

时间:2015-06-15 04:57:14

标签: javascript jquery

我正在为我的游戏制作小地图。当您单击地图时,它会扩展为更大的地图。我在minimap元素中添加了一个点击处理程序。

$("#minimap").click(function(){  
    expand larger map

我还制作了工具提示,告诉用户点击小地图。当用户点击小地图时,它会删除工具提示。此事件处理程序绑定发生在Tooltip类中:

$("#minimap").on("click", function () {
    $(this).unbind("click");
    removeChild(the tooltip object);

我不希望每次单击展开地图时都会继续触发工具提示操作,因此我将其取消绑定。不幸的是,这解除了动作以扩展其他地方定义的小地图。

如何附加某种唯一ID以告知$("#minimap")仅取消绑定与工具提示相关联的点击事件?

2 个答案:

答案 0 :(得分:2)

使用.one()仅绑定一次然后忘记它

  

将处理程序附加到元素的事件。每个事件类型(ref)每个元素最多执行一次处理程序。

$("#minimap").one("click", function () {
    removeChild(the tooltip object);

答案 1 :(得分:1)

你可以做三件事:

  1. 使用one代替onDrakes suggested

  2. 保留对该函数的引用,稍后解除对该函数的解除绑定:

    function tooltipClickHandler() {
        $(this).off("click", tooltipClickHandler);
        removeChild(the tooltip object);
    }
    $("#minimap").on("click", tooltipClickHandler);
    
  3. 使用event namespace,您可以在不必记住功能参考的情况下,唯一地指定您的点击处理程序:

    $("#minimap").on("click.tooltiphandler", function () {
        $(this).off("click.tooltiphandler");
        removeChild(the tooltip object);
    });
    
  4. 附注:我已使用off而不是unbind,因为您已使用on设置处理程序,而off是"首选"从jQuery 1.7开始。