Search code examples
javascriptjquerytimeout

Clearing setTimeout issues


I'm trying to set "mouseactive" to true less than a second after a key command, but I would like to cancel that action if the key is pressed within that time period. However I can't seem to figure out how to do this. This is what I have...

$(window).keydown(function(e) {
if (e.keyCode == 40) {
        e.preventDefault();
        mouseactive = false;
        clearTimeout(t);
        var t = setTimeout("mouseActive()",800);
} else if (e.keyCode == 38) {
        e.preventDefault();
        mouseactive = false;
        clearTimeout(t);
        var t = setTimeout("mouseActive()",800);
}
});

function mouseActive() {
mouseactive = true;
}

But this doesn't work, it doesn't set mouseactive back to true... can anyone tell me what I'm doing wrong here?


Solution

  • Edit: Cleaned up redundant code.

    More Edits: Make sure your var t is defined outside any closure including $(document).ready. See below,

    var t = null;
    
    $(document).ready(function () {
       //..below code except for var t = null
    });
    

    Declare var t outside the handler.

    var t = null;
    $(window).keydown(function(e) {
        e.preventDefault();
    
       if (e.keyCode == 40) {
            mouseactive = false;
       } else if (e.keyCode == 38) {
            mouseactive = false;
       }
    
       if (t != null) clearTimeout(t);
       t = setTimeout(mouseActive, 800);
    });
    
    function mouseActive() {
       mouseactive = true;
    }