2011-06-01 72 views
2

我打电话jQuery的每5秒插件用下面的代码传递一个变量setIntervall功能

var now = new Date(); 

    setInterval('$("#id").myplugin(now)', 1000); 

插件看起来像这样至今:

(function($){ 
    $.fn.myplugin = function(now) { 
     return this.each(function() { 
      alert(now.getTime()); 
     }); 
    } 
    })(jQuery); 

但是我得到的错误:

Uncaught ReferenceError: now is not defined
plugins.js:30 Uncaught TypeError: Cannot call method 'getTime' of undefined

所以它看起来好像现在的时间对象doenst被传递给插件函数,而不是ev在setInterval方法中定义。我大概可以调用var now = new Date();每次都在插件函数中......但我想知道,为什么它能够做到这样的工作以及如何使其工作;)。多谢。

回答

5

使用这样的功能:

var now = new Date(); 

setInterval(function() { 
    $("#id").myplugin(now); 
}, 1000); 

这样,now所谓范围设置为你调用setInterval功能。否则,它只是您所指的全局对象(window),它没有now

其次,传递一个字符串就像eval(),这是不安全和缓慢:Why is eval unsafe in javascript?

+2

这也正是这样做的方式。切勿将'setInterval'传递给一个字符串 - 总是传递一个函数。 – 2011-06-01 20:16:56

+0

@克里斯:谢谢,补充了你的观点。 – pimvdb 2011-06-01 20:18:32

1

使用这个代替:

setInterval(function(){$("#id").myplugin(now)}, 1000);