2011-09-27 47 views
0

我在我的頁面上有這個腳本,並且setTimeout函數永遠不會觸發。這只是一個警告,但我只是在測試它。如果有任何線索,我在頁面上進行元刷新,但是我也給出了10秒的延遲,因此頁面在它應該觸發之前不刷新。另外,相關的問題:如果我運行一個延遲爲10秒(帶有setTimeout)的JavaScript,並且在那個JavaScript中,我嘗試修改setTimeout被聲明時不在頁面上的設計元素,但是將在腳本被解僱之前。它會起作用嗎?爲什麼這個setTimeout不能正常工作和相關的問題

<script language=javascript> 

var xmlhttp_get_memento;  
function loop_alerte(){ 
    setTimeout(function() { 
     alert("timeout"); 
    }, 5000); 
    xmlhttp_get_memento = new XMLHttpRequest(); 
    if (xmlhttp_get_memento==null) 
    { 
     alert ("Browser does not support HTTP Request (1)"); 
     return; 
    } 
    var url="crm/ajax/get_mementos.php"; 
    url=url+"?sid="+Math.random(); 
    xmlhttp_get_memento.onreadystatechange=function() { 
     if (xmlhttp_get_memento.readyState == 4) { 
      alert(xmlhttp_get_memento.responseText);           
      schimbare_tip_cursor("default"); 
     } 
     else{ 
      schimbare_tip_cursor("progress"); 
     } 
    }; 

xmlhttp_get_memento.open("GET",url,true); 
xmlhttp_get_memento.send(null); 
} 

loop_alerte(); 
</script>'; 
+0

你應該把它分成單獨的問題。 – tvanfosson

+0

會很高興挑選一個答案 –

回答

1

您的setTimeout看起來不錯,所以可能有其他的錯誤。你有沒有嘗試過使用JavaScript調試器來查看是否有任何錯誤?

至於你的第二個問題,是的,這應該不會有任何問題,因爲setTimout中的匿名函數在運行之前不會被評估。現場示例:http://jsbin.com/afonup/2/edit無論是否帶有jQuery。

+0

我已經得到它的工作。警報沒有被設置爲匿名函數的返回值,並且在重新加載頁面的JavaScript之後有一個元刷新,從而阻止顯示警報。此外,謝謝你的示例,幫助我更好地理解setTimeout – Bogdan

0

沒有什麼不對您的setTimeout,你將需要進一步
調試關於你提到的第二個問題 - 該函數運行,但不管它是你試圖做是行不通的。

+0

這是不對的,函數運行良好,無論他想要做什麼都行,即使setTimeout達到時該元素不存在,因爲函數不會被評估到後來。看看我的答案和代碼示例。 – peirix

+0

我的網站是ajax加載元素的組合,我想要做的就是在加載一段之前啓動超時,並在加載修改元素後運行實際函數。 – Bogdan

+0

對不起,我誤解了這個問題。 – karnyj

0

清理你的代碼將是一個不錯的開始。我可以想象瀏覽器不理解標籤<script language=javascript>。我建議使用<script type="text/javascript">,如果你幸運的話,你的javascript可能工作!

+0

好吧,JavaScript的確可以工作,只是有一些東西停止顯示setTimeout中的警報。不過謝謝你的評論。 – Bogdan

相關問題