我使用以下代码每隔5秒调用一个jQuery插件
var now = new Date();
setInterval('$("#id").myplugin(now)', 1000);
到目前为止,插件看起来像这样:
(function( $ ){
$.fn.myplugin = function(now) {
return this.each(function() {
alert(now.getTime());
});
}
})( jQuery );
然而我收到错误:
未捕获的ReferenceError:现在未定义
plugins.js:30 Uncaught TypeError:无法调用未定义的方法'getTime'
因此看起来好像现在的时间对象doenst被传递给插件函数,甚至没有在setInterval方法中定义。我可以调用var now = new Date();每次都在插件函数中...但我想知道,为什么它会像这样工作以及如何使它工作;)。很多。
答案 0 :(得分:5)
使用这样的函数:
var now = new Date();
setInterval(function() {
$("#id").myplugin(now);
}, 1000);
这样,now
的所谓范围被设置为您调用setInterval
的函数。否则,它只是您所指的全局对象(window
),它没有now
。
其次,传递一个字符串就像eval()
一样,这是不安全和缓慢的:Why is eval unsafe in javascript?。
答案 1 :(得分:1)
请改用:
setInterval(function(){$("#id").myplugin(now)}, 1000);