我正在尝试编写一个函数,我需要在window.setTimeout中引用“this”。目前它不起作用。我怎么能重写这个呢?感谢。
$(function() {
$('li a').click(function() {
$(this).parent().css('background-position','left top');
window.setTimeout("$(this).css('font-size','40px');",1000);
});
});
答案 0 :(得分:4)
如您所见,this
在setTimeout()
内有不同含义。
一种解决方案是将this
的正确值存储在变量中,并在传入的匿名函数中引用它。
$(function() {
$('li a').click(function() {
$(this).parent().css('background-position','left top');
var th = this;
window.setTimeout(function() {
$(th).css('font-size','40px');
},1000);
});
});
另一种选择是使用jQuery的$.proxy()
,它为您保留this
的值。
$(function() {
$('li a').click(function() {
$(this).parent().css('background-position','left top');
window.setTimeout($.proxy(function() {
$(this).css('font-size','40px');
}, this)
,1000);
});
});
否则,你可以创建一个闭包。
$(function() {
$('li a').click(function() {
(function( th ) {
$(th).parent().css('background-position','left top');
window.setTimeout(function() {
$(th).css('font-size','40px');
}
,1000);
})( this );
});
});
答案 1 :(得分:0)
您需要在setTimeout调用中创建一个闭包。
$(function() {
$('li a').click(function() {
var $this = $(this);
$this.parent().css('background-position','left top');
window.setTimeout(function () {
$this.css('font-size','40px');
},1000);
});
});
应该更接近。
答案 2 :(得分:0)
window.setTimeout(function(){$(this).css('font-size','40px')},1000);
没有引号。它需要是一个功能。