[英]IE8 problem with javascript function that calls itself in setTimeout
我有一個在JavaScript中定義的定位函數
var locID;
function locateMe()
{
if(locID > 0)
{
// i do a jquery post here
}
setTimeout(locateMe, 2000);
}
// my document ready function is here, and inside it, at the end of it
// i do this
locID = 0;
locateMe();
當我在firefox中測試此代碼時,每兩秒調用一次locateMe函數並按預期工作。 當我在IE8中測試代碼時,函數永遠不會被調用(至少它看起來永遠不會被我使用IE的開發人員工具看到)
注意:在“zone_row”類的click事件處理程序中定義了修改locID的代碼。 再次,在Firefox中一切都按預期工作。 奇怪的是,在IE中點擊zone_row時,函數將被稱為ONCE。 我可以看到開發人員工具和jquery帖子的操作結果。
我認為IE中只有一些我不熟悉的異常情況。 我究竟做錯了什么?
編輯:更改“locateMe();” 在setTimeout調用中定位Me。
更新:添加更多我的代碼(在評論中的每個請求)以顯示位置(盡管代碼不比我的第一篇文章多)。
<script type="text/javascript">
var z_items;
var locID;
function locateMe()
{
if(locID > 0)
{
// my jquery post is here
}
setTimeout(locateMe, 2000);
}
$(document).ready(function()
{
// ... some click events and get requests here ...
locID = 0;
locateMe();
});
</script>
我也嘗試在setTimeout中包裝調用(沒有效果)並更改DOCTYPE(這實際上導致IE從不調用函數,而不是現在它稱之為ONCE並且再也不會)。
問題解決了。 我找到了這個帖子中我遇到的另一個問題的答案:
添加$ .ajaxSetup({cache:false}); 對於我的文檔就緒功能,它也解決了這個問題。 它看起來像是一個緩存問題。
我發現,對於IE(甚至是IE9),如果你將自調用函數嵌套在一個匿名函數中,它就可以工作。 但看起來Toddeman的問題確實與ajax部分有關。
所以代碼是:
function locateMe()
{
/* ... */
//IE way (still works in Chrome and FF):
setTimeout(function () { locateMe(); }, 2000);
//original: setTimeout(locateMe, 2000);
}
使用
setTimeout( locateMe, 2000 );
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.