我會盡我所能清楚地解釋我的問題。 所以我做了一堆顯示值的javascript函數,並保持這些值是最新的,我需要一個間隔刷新功能。開始刷新JavaScript功能,然後停止它們並重新啓動刷新它們
這些都是在我的間隔
var interval = null; //make global variable for interval
function refresh(){ // create a function that contains all the functions that need to be refreshed so I can pass this function to my setInterval
g1.refresh(linearScaling(0, 32761 , 0 , 10, readData('IW0')));
showAnalogText('textonly', 'IW0');
g2.refresh(linearScaling(0, 32761 , 0 , 10, readData('IW1')));
showAnalogText('textonly2', 'IW1');
showDigInputImg('light1', 'IX2.0', '/imgs/lightON.png', '/imgs/lightOFF.png');
showDigInputImg('light2', 'IX2.1', '/imgs/lightON.png', '/imgs/lightOFF.png');
showDigInputBool('led1', 'IX2.0', 'radio');
showDigInputBool('led2', 'IX2.1', 'radio');
showDigInputBool('boolean1', 'IX2.0', 'bool');
showDigInputBool('boolean2', 'IX2.1', 'bool');
showDigInputBool('text1', 'IX2.0', 'text');
showDigInputBool('text2', 'IX2.1', 'text');
showDigInputImg('output1', 'QX2.0', '/imgs/lightON.png', '/imgs/lightOFF.png');
showDigInputImg('output2', 'QX2.1', '/imgs/lightON.png', '/imgs/lightOFF.png');
}, 1000)
所以這些功能都需要不斷更新的功能,它們執行與阿賈克斯的讀請求,但我也有寫功能,我想實現的目標,就是停止每當我執行我的寫入函數的時間間隔,所以ajax請求停止,我可以執行我的寫入請求,寫入完成後重新開始間隔。
這些都是我的啓動和停止功能:
function startRefresh(){ //needs to be declared in my library but the function refresh() doesn't exist in library
if (!interval){
interval = setInterval(refresh, 1000);
}
}
function stopRefresh(){
clearInterval(interval);
interval = null;
}
我知道這工作,但問題是我建立一個庫,以便用戶可以重新使用我的功能供自己使用,所以startrefresh和stoprefresh函數將在庫中,但startrefresh函數需要refresh()(包含所有其他函數),但刷新只能在HTML頁面本身的javascript中聲明(不在庫中),因爲函數refresh包含對象作爲在運行時創建的g1和g2,所以我不能在我的庫中聲明refresh(),因爲它包含的對象還不存在。
任何人都可以幫助我得到一個簡單的解決方案,U可以改變任何你想要的,我只是想用最有效的方式,用戶可以把他需要的所有功能刷新一段時間,並停止並開始間隔時,我執行寫操作,但stop和startrefresh函數需要在庫中,用戶不應該看到啓動和停止功能,它們在我的寫入函數中被調用。 希望有人能夠理解這一點,並幫助我,我會非常感激,如果你需要更多的解釋我很樂意給你
也許把所有的功能放在某種變量,並將該變量傳遞給我startrefresh功能,會工作嗎?
和平,斯泰恩
這是有道理的,但問題是,我有我的圖書館寫函數被調用時,一個按鈕被點擊,這是我的寫功能'\t \t函數writeData(adres,value){ \t \t \t \t \t \t stopRefresh(); \t \t \t var url = getUrl(); \t \t \t $ .get(url +'/ WRITEPI?ADR1 ='+ adres +'&VALUE1 ='+ value +'&FORMAT1 =%d',function(data){}); \t \t \t startRefresh(refresh); \t \t}' 所以問題是當writedata被調用時,startrefresh最終會被調用,但是我不能像你說的那樣實現它,因爲在庫中像g1和g2這樣的元素不存在。 對不起,如果你不明白,我很難解釋。 – 2013-03-12 19:53:55
你可以使用更高階的函數,我會更新答案。 – jcubic 2013-03-12 19:57:18
哇很好我明白了,非常感謝,但是我仍然有一個問題,當我創建變量'startrefresh'時,由'makeStartRefresher'返回的函數,何時執行?它是否在變量創建時被調用?是否有可能將此變量傳遞給一個函數(即我的寫函數)並在該函數內執行該變量?我希望這樣,以便在執行寫入時(必須停止並重新啓動時間間隔),我可以傳遞它,因此我不必在我的寫入函數內重新定義整個startrefresh變量 – 2013-03-12 22:35:53