与setTimeout函数一起使用时,onClick事件被窃听

时间:2014-06-27 15:19:58

标签: javascript jquery

当用户在ID为onClick的元素上执行onClick事件时,我想暂停.flipper事件一秒钟。问题是当我调用TriggerOnClick()函数时,它会永久禁用onClick事件。

以下是我正在使用的代码

function TriggerOnClick(){
    setTimeout(function() {
        $(".flipper").off("click", TriggerOnClick);
    }, 1000);

    $(".flipper").on("click", TriggerOnClick);
}

$(".flipper").click(TriggerOnClick);

3 个答案:

答案 0 :(得分:4)

你的逻辑有点倒退 - 你会立即禁用然后在超时中绑定:

function TriggerOnClick(){
    setTimeout(function() {
        $(".flipper").on("click", TriggerOnClick);
    }, 1000);
    $(".flipper").off("click");
}

答案 1 :(得分:2)

你实际上在一秒钟之后将其关闭。因此,可以清楚地了解首先发生的事情,我将.off放在函数的顶部:

function TriggerOnClick(){
    $(".flipper").off("click");
    setTimeout(function() {
        $(".flipper").on("click", TriggerOnClick);
    }, 1000);
}

$(".flipper").click(TriggerOnClick);

答案 2 :(得分:0)

这可能是因为javascript中的setTimeout函数具有误导性名称。它更像是来自其他语言的sleep()delay(),因为它在第一个参数中执行函数之前等待指定的时间。

我认为你想要做的是

function TriggerOnClick() {
  setTimeout(function() {
    $(".flipper").on("click",TriggerOnClick);
  }, 1000);
  $(".flipper").off("click", TriggerOnClick);
}