簡體   English   中英

IE8問題與javascript函數在setTimeout中調用自身

[英]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並且再也不會)。

問題解決了。 我找到了這個帖子中我遇到的另一個問題的答案:

防止瀏覽器緩存jQuery AJAX調用結果

添加$ .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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM