我正在努力创造一个像彗星一样的东西。我有一个从php页面收集数据的插件。问题是我不知道如何调用插件本身。
如果它是一个函数我可以这样:function j () {setTimeout(j(), 1000);}
,但我使用的是jQuery插件。
这是我的插件代码:
(function($) {
$.fn.watch = function(ops) {
var
$this_ = this,
setngs = $.extend({
'type' : 'JSON',
'query' : 'GET',
'url' : '',
'data' : '',
'wait' : 1000
}, ops);
if (setngs.type === '') {
return false;
} else if (setngs.query === '') {
return false;
} else if (setngs.url === '') {
return false;
} else if (setngs.wait === '') {
return false;
} else if (setngs.wait === 0) {
setngs.wait = 1000;
}
var xhr = $.ajax({
type : setngs.query,
dataType : setngs.type,
url : setngs.url,
success : function(data) {
var i = 0;
for (i = 0; i < data.length; i++) {
var html = $this_.html(), str = '<li class="post" id="post-' + data[i].id + '"><div class="inner"><div class="user">' + data[i].user + '</div><div class="body">' + data[i].body + '</div></div></li>';
$this_.html(str + html);
}
setTimeout($this_, 1000);
}
});
};
})(jQuery);
它说setTimeout($this_, 1000);
这就是我遇到麻烦的地方。我不知道该把插件称为什么。 $this_
是我认为可行的,但我错了。这就是我需要替换的东西。
感谢您的帮助。
答案 0 :(得分:1)
在这里,我可能会使用JavaScript的call()
来调用函数。 MDN Documentation
因此,在插件中,您可以使用$.fn.watch.call(this)
来调用它。传递给call
的参数设置了它的范围,因此传入this
以在同一范围内调用它。
我在JSBin上汇总了一个基本的例子。
您可以在setTimeout
内使用它:
setTimeout(function() { $.fn.watch.call(this) }, 1000);
希望这会有所帮助:)