函数超时
Function timeout
我正在尝试编写一个代码,在有限的时间内将类添加到div,然后将其删除。
我尝试使用javascript的setTimeout和jQuery的延迟,但没有任何效果。
该元素已设置,但从未删除。
这是我想出的:
window.onload = function() {
$(".button").click(handler);
}
function handler() {
$(this).addClass("onclick");
setTimeout(function() { $(this).removeClass("onclick"); }, 3000); // JS's setTimeout
$(this).addClass("onclick").delay(3000).removeClass("onclick"); // jQuery's delay
}
我不明白怎么了...我甚至尝试为 setTimeout 函数编写第二个处理程序。
提前谢谢。
您遇到的问题是,this
在传递给setTimeout
的函数中与在函数外部不同。通常的解决方法是通过创建一个变量来保存闭包,然后改用变量来使用闭包:
function handler() {
var $elm = $(this);
$elm.addClass("onclick");
setTimeout(function() {
$elm.removeClass("onclick");
}, 3000);
}
在那里,我还使用 var 来缓存$(this)
的结果,因为多次这样做是没有意义的。
更多背景:
在 JavaScript 中,与一些看起来相似的语言不同,this
完全由函数的调用方式定义。当你使用setTimeout
时,函数的调用方式将使this
成为全局对象(window
,在浏览器上),所以这就是$(this).removeClass(...)
不起作用的原因。
如果您有兴趣,请详细了解this
:
- 神话般的方法
- 你必须记住
this
setTimeout 调用中的this
不引用单击的元素。
将其更改为:
function handler() {
var t = $(this);
t.addClass("onclick");
setTimeout(function() { t.removeClass("onclick"); }, 3000);
}
工作示例 - http://jsfiddle.net/5vakN/
this
如何在 javascript 中工作的参考 - http://bonsaiden.github.com/JavaScript-Garden/#function.this
相关文章:
- 将变量传递到超时函数的Javascript
- 如何循环设置超时函数
- Jquery-超时函数
- 传递到超时函数时删除的小数点
- 如何通过密钥输入重新触发超时函数
- Javascript 在 for 循环中设置了超时函数
- 中断 JQuery 设置超时函数
- 设置超时函数回调静态变量
- 在浏览器空闲后保持设置超时函数运行
- 如何设置超时函数
- 强制 JavaScript 超时函数立即执行
- jQuery 超时函数从未在 mouseEnter mouseleave 上调用过
- 具有可变时间的设置超时函数
- jQuery动画到底后超时函数
- 超时函数完成后如何调用函数
- 如何创建一个rucursive超时函数
- javascript超时函数
- 多个设置超时函数在第一次单击时不执行
- 访问超时函数内的变量
- 在对象中设置超时函数