0

您好,我正在为 j Query 编写插件,但问题是我必须使用 $.now() 函数,当我将它与 alert() 一起使用时,它工作得很好,但是当我把它放在代码中时它不会显示任何内容,并且 text() 也可以在插件中使用,但唯一的问题是当我使用函数设置间隔时,现在事情出现了,我尝试了以下代码:

setInterval(function(){

this.text($.now());

},1000); 

它不起作用,但是当我使用警报时它起作用了,所以我必须做什么?

4

2 回答 2

6

在 setinterval 回调函数内部时,您会丢失上下文。你可以这样做。

//.. some event

var $this = $(this);

setInterval(function(){
   $this.text($.now());
},1000); 

//.. code follows

或者使用$.proxy你可以设置上下文。

setInterval($.proxy(function(){
   $(this).text($.now());
},this),1000); 

或者使用 Ecmascript 5 Function.prototype.bind仅通过文档中提到的 shim 支持 IE8 及以下版本)

setInterval((function(){
   $(this).text($.now());
}).bind(this),1000); 

这是一个包含所有三个选项的演示

于 2013-06-28T03:16:20.117 回答
0

这是指什么?建议你用实际的选择器代替这个。在函数内部, this 的值可以变化

var obj = $(".text");
setInterval(function(){
    obj.text($.now());
},1000); 

obj 在这里充当闭包

于 2013-06-28T03:17:46.763 回答