Steve
Steve

Reputation: 327

clearTimeout() Doesnt work

When I double click, it seems that the clearTimeout(timer) doesnt work, and the code calls the function activated(currentactiveid);

But also the function inside the setTimeout("activated2('" + currentactiveid + "')", 2000); references timer. So at the end I think that the problem is that the clearTimeout cannot find the variable timer.

HTML:

<td class='td2'  id='currentid1' ondblclick='activatedd(this);' onclick='dclickornot(this);'>Some Text</td>

Javascript:

// Single Click 
function dclickornot(e)
{
    var currentactiveid = e.id;
    var timer = setTimeout("activated2('" + currentactiveid + "')", 2000);
}

// Double Click
function activatedd(e)
{
    clearTimeout(timer);
    var currentactiveid = e.id;
    activated(currentactiveid);
}

Upvotes: 0

Views: 1726

Answers (4)

Tyler Crompton
Tyler Crompton

Reputation: 12652

In JavaScript, variables are defined in the scope of the function. So you must use a global variable instead. This still doesn't prevent multiple single clicks, though.

(function () {
    'use strict';

    var timer, currentactiveid;

    // Single Click 
    function dclickornot(e) {
        currentactiveid = e.id;
        timer = window.setTimeout(function () {activated2(currentactiveid); }, 2000);
    }

    // Double Click
    function activatedd(e) {
        window.clearTimeout(timer);
        timer = undefined;
        currentactiveid = e.id;
        activated(currentactiveid);
    }
}());

Upvotes: 4

Jerome WAGNER
Jerome WAGNER

Reputation: 22412

In javascript, the "var" keyword used inside a function creates a local variable that can only be seen from inside this function or from the scope chain created underneath this function.

In your case, "clearTimeout(timer);" is using a timer variable that is always undefined.

Upvotes: 0

jornare
jornare

Reputation: 2893

Your timer variable is declared inside a function, and is out of scope in the activatedd function. To resolve it, declare timer in global scope, outside the two functions.

Upvotes: 0

Fluidbyte
Fluidbyte

Reputation: 5210

You need to remove 'var' from in front of your timer. It's scope is locked to the dclickornot() function.

Upvotes: 1

Related Questions