混淆了setTimeout和clearTimeout

phi*_*owe 0 javascript jquery settimeout

我有一个按钮,当它翻转时会改变div的背景.后台需要在计时器上更改,所以我使用setTimout来执行更改背景的方法.我认为clearTimeout会取消和我设置的超时,所以我把它放在mouseleave事件上.然而它似乎并没有停止超时.我的逻辑在这吗?

$("#h2Buzz").mouseenter(function () {   
   setTimeout(playV(), 2700);
   setTimeout(playP(), 5400);
}); 
$("#h2Buzz").mouseleave(function () {
   clearTimeout(playV());
   clearTimeout(playP());
});


function playV() {
    $("#ServicesBackgroundImage2").css("background-image", "url(/images/v.jpg)");
}
function playPn() {

    $("#ServicesBackgroundImage2").css("background-image", "url(/images/p.jpg)");
}
Run Code Online (Sandbox Code Playgroud)

ken*_*ytm 7

你正在使用setTimeoutclearTimeout错误地使用.该setTimeout函数返回超时的句柄,该句柄将被传递clearTimeout以停止它.

var playVTimeout;

...

    playVTimeout = setTimeout(playV, 2700);

....

    clearTImeout(playVTimeout);
Run Code Online (Sandbox Code Playgroud)

另外请注意,setTimeout(playV(), 2700);将调用playV() 现在和2.7秒后执行它的返回值.你应该传递一个函数对象playV.


chi*_*ley 6

为您分配一个变量setTimeout,然后传递给clearTimeout它以清除它,即

var play_timeout = setTimeout("playV()", 2700);
clearTimeout(play_timeout);
Run Code Online (Sandbox Code Playgroud)

(注意我在你的第一个setTimeout参数附近添加了引号)

  • 无需使用引号,只需传递函数名称:`var play_timeout = setTimeout(playV,2700); ` (4认同)