控制台记录器在一次鼠标按下时调用两次

Console logger called twice on one mousedown

我在使用 jQuery 的 onmousedown 时遇到了一个奇怪的问题。我有一个插件,您可以为其分配按钮并添加一些选项,如下所示:

$.lollipopbutton(".buttons button", {
    bubble_color: "rgba(0,0,0,1)"
});

此插件中发生的一件事是当您单击按钮时,将触发动画。但是,我只想让这个动画一次被触发 x 次。因此,我添加了选项 maxClicks(用于测试目的的默认值 = 10)。此外,每个按钮都有一个 jQuery 数据元素来跟踪计数器:

counter = $this.data("counter") || 0;

然后我们可以将计数器与 maxClicks 选项进行比较:

if (counter <= args.maxClicks) {}

然后把我们只想一次执行两次的函数放在那里:

        if (counter <= args.maxClicks) {
            // Do stuff
            $this.data("counter", ++counter);
            console.log(counter);

            setTimeout(function () {
                $this.children(".bubble:first").remove();
                if (!$this.children(".bubble").length) {
                    $this.data("counter", --counter);
                }
            }, totalTimeout);
        }
    });

但奇怪的是,每次点击 console.log() returns 两次,总是两个连续的数字(例如 1 & 2、3 & 4、5 & 6 等等)。

我尝试了所有方法,但无法确定问题所在。我在这里错过了什么?可以找到插件 (wip) here in a fiddle.

它被调用了两次,因为在 lollipopbutton 函数中您附加了一个 mousedown 处理程序。你叫lollipopbutton喜欢

$.lollipopbutton(".buttons button", {
    bubble_color: "rgba(0,0,0,1)"
});

$.lollipopbutton(".buttons button.white", {
    text_overlay: false
});

这将附加 mousedown 处理程序两次