您好,我正在为 j Query 编写插件,但问题是我必须使用 $.now() 函数,当我将它与 alert() 一起使用时,它工作得很好,但是当我把它放在代码中时它不会显示任何内容,并且 text() 也可以在插件中使用,但唯一的问题是当我使用函数设置间隔时,现在事情出现了,我尝试了以下代码:
setInterval(function(){
this.text($.now());
},1000);
它不起作用,但是当我使用警报时它起作用了,所以我必须做什么?
您好,我正在为 j Query 编写插件,但问题是我必须使用 $.now() 函数,当我将它与 alert() 一起使用时,它工作得很好,但是当我把它放在代码中时它不会显示任何内容,并且 text() 也可以在插件中使用,但唯一的问题是当我使用函数设置间隔时,现在事情出现了,我尝试了以下代码:
setInterval(function(){
this.text($.now());
},1000);
它不起作用,但是当我使用警报时它起作用了,所以我必须做什么?
在 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);
这是一个包含所有三个选项的演示
这是指什么?建议你用实际的选择器代替这个。在函数内部, this 的值可以变化
var obj = $(".text");
setInterval(function(){
obj.text($.now());
},1000);
obj 在这里充当闭包