2014-02-28 94 views
1

demoaddClass不setTimeout函数

$('button').on('click',function(){ 
    setTimeout(function(){ 
     $(this).addClass('active'); 
    },500); 
}); 

活动类应该500个ms后加入内工作,但它不添加不改变它的背景色。

+6

两个字 - '功能scope' –

+1

对于完整性,使用队列()将是jQuery'ish办法做到这一点 - > http://jsfiddle.net/CL4VD/4/ – adeneo

回答

7

this并不是指点击的按钮中的setTimeout()内处理,你可以使用一个简单的闭包变量来保存对被单击元素的引用,并在超时处理程序中使用它

$('button').on('click', function() { 
    var $el = $(this); 
    setTimeout(function() { 
     $el.addClass('active'); 
    }, 500); 
}); 
0

您可以在一个变量保存$(this),才能在setTimeout函数访问$(this)

$('button').on('click',function(){ 
    var $this = $(this); 
    setTimeout(function(){ 
     $this.addClass('active'); 
    },500); 
}); 

Updated Fiddle

3

使用proxy

$('button').on('click',function(){ 
    setTimeout($.proxy(function(){ 
     $(this).addClass('active'); 
    },this),500); 
}); 

setTimeout函数中的“这”指的是window对象不是你点击,但使用代理“这个”定义你点击按钮的按钮。

demo

0

试试这个:

$('button').on('click',function(){ 
var that = $(this); 
setTimeout(function(){that.addClass('active');},500); 
}); 

Working Fiddle