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一个正确的想法。