clearTimeout()不起作用

时间:2012-05-27 20:01:20

标签: javascript

当我双击时,似乎clearTimeout(timer)不起作用,代码调用function activated(currentactiveid);

setTimeout("activated2('" + currentactiveid + "')", 2000);引用timer中的函数也是如此。所以最后我认为问题是clearTimeout无法找到变量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);
}

4 个答案:

答案 0 :(得分:4)

在JavaScript中,变量在函数范围内定义。所以你必须使用全局变量。但这仍然无法阻止多次单击。

(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);
    }
}());

答案 1 :(得分:1)

您需要从计时器前删除'var'。它的范围被锁定到dclickornot()函数。

答案 2 :(得分:0)

您的计时器变量在函数内声明,并且在激活的函数中超出范围。要解决它,请在全局范围内声明计时器,在两个函数之外。

答案 3 :(得分:0)

在javascript中,函数内部使用的“var”关键字创建一个局部变量,该变量只能在此函数内部或在此函数下创建的作用域链中看到。

在你的情况下,“clearTimeout(计时器);”正在使用一个始终未定义的计时器变量。