2016-08-12 149 views
1

如果可能,我想重新加載jQuery prototype/function延遲後,而不刷新所有頁面。重新加載當前函數後無時間重新加載頁面

my.prototype.reloadMe = function() { 
    setTimeout(function(){ 
     my.reloadMe(); 
    },1000); 
    alert('ok'); 
}; 

我試圖在功能setTimeout但它沒有工作:它refreshs一次。

感謝您的建議或解釋。

+0

你能告訴我們你的'setTimeout'試試嗎? – eisbehr

+0

'setTimeout'就是你想要的。 「但是id不起作用」 - 嘗試調查它。發生了什麼?控制檯中的任何錯誤? –

+0

我編輯了我的帖子。謝謝 – PSport

回答

3

在你的代碼定義原型功能,然後嘗試調用它作爲一個目標函數。您應該會看到類似「my.reloadMe()不是函數」的錯誤。

my.prototype.reloadMe = function() { 
    setTimeout(function(){ 
     my.reloadMe(); // "my" object does not contain "reloadMe" function 
    },1000); 
    alert('ok'); 
}; 

如果要訪問此功能,您可以調用這個函數原型:

setTimeout(function(){ 
    my.prototype.reloadMe(); 
}, 1000); 

或實例化對象,並調用該函數:

setTimeout(function(){ 
    new my().reloadMe(); 
}, 1000); 

其中兩個做聽起來不正確。

它看起來像最好的解決方案是命名您的匿名函數:

my.prototype.reloadMe = function reload() { 
    setTimeout(reload, 1000); 
    alert('ok'); 
};); 

注1:在你的代碼您使用setTimeOut,而這是setTimeout。 JS區分大小寫。也許,它可能是錯誤的來源。

注2:任何此代碼都會使其運行在無限循環中。所以,實際上,你會每秒收到一次警報。我希望這正是你正在努力實現:)

+0

感謝您的回答。這變得很清楚。問題解決了! :) – PSport

1

//Create your object: 
 

 
function myobject(){ 
 
    
 
} 
 

 
//add prototype to that object 
 

 
myobject.prototype.reloadMe = function(){ 
 
    
 
    // instead of recursion you can use interval 
 
    
 
    setInterval(function() { 
 
    alert('ok'); 
 
    }, 1000); 
 
} 
 

 
// instantiate that object 
 

 
var my = new myobject(); 
 

 
//call your function 
 

 
my.reloadMe();

+0

感謝您的解釋。我現在明白了:) – PSport

2

應該this.reloadMe得到正確的實例。

my.prototype.reloadMe = function() { 
    var that = this; 

    setTimeOut(function(){ 
     that.reloadMe(); 
    }, 1000); 

    alert('ok'); 
}; 

但是,這將是一個無止境的循環。如果你只想再次調用它,你必須打破這個問題。

my.prototype.reloadMe = function() { 
    var that = this; 

    if(!that.delayedCalled) { 
     setTimeOut(function() { 
      that.delayedCalled = true; 
      that.reloadMe(); 
     }, 1000); 
    } 

    alert('ok'); 
}; 
+0

感謝您的解釋,真的很清楚! – PSport