Javascript SetTimeout仅在mousedown上执行一次

Javascript SetTimeout仅在mousedown上执行一次,javascript,jquery,Javascript,Jquery,我所要做的就是将一个显示在框中的数字增加1,并让它每100毫秒增加一次,只要鼠标按下。该函数将执行,但无论按住鼠标多长时间,都不会超过一次。每次在这个元素上出现mousedown事件时,它只会将变量增加1,我可以在框中看到这一点,而我希望看到,只要鼠标不动,这个数字就会快速增加。mouseup事件是否有任何代码可以阻止mousedown事件继续执行setTimeout中的函数,或者是否缺少某种规则?奇怪 var mouseDownCount = 0; $("#addButton").mouse

我所要做的就是将一个显示在框中的数字增加1,并让它每100毫秒增加一次,只要鼠标按下。该函数将执行,但无论按住鼠标多长时间,都不会超过一次。每次在这个元素上出现mousedown事件时,它只会将变量增加1,我可以在框中看到这一点,而我希望看到,只要鼠标不动,这个数字就会快速增加。mouseup事件是否有任何代码可以阻止mousedown事件继续执行setTimeout中的函数,或者是否缺少某种规则?奇怪

var mouseDownCount = 0;

$("#addButton").mousedown(function () { startMouseCount(); }); 

function startMouseCount() {
  $("mouseCount").html(mousedownCount)

  mdcTimer = window.setTimeout(function () {
    mousedownCount++;
    $("#mouseCount").html(mousedownCount);
  }, 100);

  return false;
}

您的代码有许多问题:

  • 当变量为
    mousedownCount
    时,您正在多次引用
    mousedownCount
    。案例一致性很重要
  • 您错过了
    $(“mousecoount”)
    中的
    ID引用(它应该是
    $(“#mousecoount”)
除此之外,您正在寻找而不是,因为
setInterval()
将触发多次,而
setTimeOut()
将只触发一次

请注意,您可能还希望停止计时器的无限计数,这可以在
鼠标上完成:

下面是一个工作示例:

var mouseDownCount=0;
$(“#添加按钮”).mousedown(函数(){
startMouseCount();
});
$(“#添加按钮”).mouseup(函数(){
endMouseCount();
});
函数startMouseCount(){
$(“#mouseCount”).html(mouseDownCount)
mdcTimer=window.setInterval(函数(){
mouseDownCount++;
$(“#mouseCount”).html(mouseDownCount);
}, 100);
返回false;
}
函数endMouseCount(){
clearInterval(mdcTimer);
}

向下

我想你可能想要这个:

var mouseDownCount=0;
var-mdcTimer;
$(“#添加按钮”).mousedown(startMouseCount);
$(“#添加按钮”).mouseup(stopMouseCount);
函数startMouseCount(){
mdcTimer=window.setTimeout(函数(){
mouseDownCount++;
$(“#mouseCount”).html(mouseDownCount);
startMouseCount();
}, 100);
}
函数stopMouseCount(){
clearTimeout(mdcTimer);
}

按钮

setTimeout本身不会重复。setInterval不为此作业使用setInterval或递归调用同一函数。是的,你是对的,这就是我错过的。有人能把它作为一个答案,这样我就可以把它标记为接受了吗?我刚刚添加了一行,它在其中调用自己,并且可以正常工作。我有其他功能在其他地方停止它,所以它不需要停止自己。或者只是删除你的问题,因为它是重复的。我不是向下的投票人。。。但是«……只要鼠标按下,它每100毫秒就会停止一次。»我已经更新了代码,创建了第二个函数,在按钮不再按下时停止计时器=]对,这正是我所做的,它工作了。我只是让函数本身递归调用,因为还有其他事件将停止计时器。变量错误实际上是我的输入错误,因为我没有复制并粘贴它,我输入了它,但是你在这里修复了它,所以我将它标记为最佳答案,递归调用只需要额外一行代码。我更喜欢setTimeout而不是setInterval,因为它更精确。在这种情况下,setInterval()是一个更好的解决方案。