0

当我双击时,似乎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

4 回答 4

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);
    }
}());
于 2012-05-27T20:05:34.993 回答
1

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

于 2012-05-27T20:03:34.733 回答
0

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

于 2012-05-27T20:06:41.577 回答
0

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

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

于 2012-05-27T20:06:50.030 回答