首页 > 解决方案 > SetTimeout 多次调用函数如何避免它

问题描述

我有 2 个 setTimeout 函数,它调用 2 个不同的函数,但在某些情况下,从 setTimeout 调用一个函数多次发生,不知道如何解决这个问题,任何帮助将不胜感激。我使用此脚本在网页上查找用户空闲时间,并将空闲时间更新到我的数据库。

window.onmousemove = resetTimer('y');
window.onload = resetTimer('y');
window.onmousemove = resetTimer('y');
window.onmousedown = resetTimer('y');
window.onmouseup = resetTimer('y');
window.ontouchstart = resetTimer('y');
window.onclick = resetTimer('y');
window.onkeypress = resetTimer('y');
window.onscroll = resetTimer('y');
var t;

function resetTimer(v) {
  clearTimeout(t);
  if (v == 'y') {
    t = setTimeout(Ytimepop, 4000);
  }
  if (v == 'z') {
    t = setTimeout(Ztimepop, 5000);
  }
}

function Ytimepop() {
  // ajax code
  resetTimer('z');
}

function Ztimepop() {
  // ajax code
}

在窗口鼠标悬停和其他事件上,我调用了一个函数,该函数将调用 resetTimer('y') 并开始计算 Ytimepop 计时器,并且该函数被多次调用,Ztimepop 计时器也同样如此。

标签: javascriptjqueryajax

解决方案


你应该使用

var t;
window.onmouseover = function() {
  resetTimer('y');
}
function resetTimer(v) {
    clearTimeout(t);
    // --- rest of your code                     
}

目前尚不清楚您要使用onmouseoveronmousemove


推荐阅读