Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/456.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript clearTimeout()不起作用_Javascript - Fatal编程技术网

Javascript clearTimeout()不起作用

Javascript clearTimeout()不起作用,javascript,Javascript,当我双击时,似乎clearTimeout(timer)不起作用,代码调用函数activated(currentactiveid) 还有setTimeout(“activated2(“+currentactiveid+”)”,2000)中的函数参考计时器。最后,我认为问题在于clearTimeout找不到变量timer HTML: <td class='td2' id='currentid1' ondblclick='activatedd(this);' onclick='dclickor

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

还有
setTimeout(“activated2(“+currentactiveid+”)”,2000)中的函数参考<代码>计时器
。最后,我认为问题在于
clearTimeout
找不到变量
timer

HTML:

<td class='td2'  id='currentid1' ondblclick='activatedd(this);' onclick='dclickornot(this);'>Some Text</td>
// 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);
}

您需要删除计时器前面的“var”。它的作用域被锁定为dclickornot()函数。

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

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

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

计时器变量在函数中声明,并且在activatedd函数中超出范围。要解决此问题,请在两个函数之外的全局作用域中声明计时器。

您的计时器变量在函数内部声明,在activatedd函数中超出作用域。要解决此问题,请在两个函数之外的全局作用域中声明计时器。

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

在您的例子中,“clearTimeout(timer);”使用的是一个始终未定义的计时器变量。

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


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

请缩进(或至少阻止)您的代码…请不要使用标记格式化代码;选择它,然后使用
{}
将其标记为显示代码。即使在所有格式错误的问题中,
timer
变量显然不在范围内。另外,两个
timer
变量在单独的(函数)范围内,这意味着您不能在函数之间引用它们。请缩进(或至少阻止)您的代码…请不要使用标记格式化您的代码;选择它,然后使用
{}
将其标记为显示代码。即使在所有格式错误的问题中,
timer
变量显然不在范围内。另外,两个
timer
变量在单独的(函数)中作用域,这意味着您不能在函数之间引用它们。正确地进行函数调用(通过避免
eval
)真是太好了。尽管我仍然不喜欢全局变量。@JaredFarrish,是的,但是对此没有什么可做的。:@Steve-您想在双击上做点什么吗?注意,有一个
dblclick
事件处理程序。你看,我不同意。请看我的演示:jsfiddle.net/r7wgJAh,没有想到这一点。我更新了代码。我觉得有点懒得去做一个有效的实现,因为有丢失的/命名错误的函数,我们不知道HTML是什么样子。但是这应该给OP一个正确的想法。正确地执行函数调用(通过避免
eval
)。虽然我仍然不喜欢全局变量。@JaredFarrish,是的,但是对此没有什么可以做的。:)@史蒂夫-你想在双击上做点什么吗?注意,有一个
dblclick
事件处理程序。你看,我不同意。请看我的演示:jsfiddle.net/r7wgJAh,没有想到这一点。我更新了代码。我觉得有点懒得去做一个有效的实现,因为有丢失的/命名错误的函数,我们不知道HTML是什么样子。但这应该给OP一个正确的想法。