2011-06-01 71 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);