2012-03-01 36 views
1

我偶爾遇到這個問題,我不知道如何解決它。這裏是我的代碼失敗:除非我使用alert(),否則JavaScript將不起作用!

function on_lightbox_open() { 

    system.contextBrowserInit(); 

    updateUrl(year + '/' + month + '/' + id); 
    ads.reload(); 
    system.analytics.reload(); 

    FB.XFBML.parse($('#bottom_flap .fb_like').get(0)); // facebook 
    $.ajax({ url: 'http://platform.twitter.com/widgets.js', dataType: 'script', cache: true }); 

    $('#lightbox .close').live('click', function(){ 
     $.modal.close(); 
    }); 
} 

如果我在開始時添加提醒,像這樣:

function on_lightbox_open() { 

    alert('i work now'); 

    system.contextBrowserInit(); 

    updateUrl(year + '/' + month + '/' + id); 
    ads.reload(); 
    system.analytics.reload(); 

    FB.XFBML.parse($('#bottom_flap .fb_like').get(0)); // facebook 
    $.ajax({ url: 'http://platform.twitter.com/widgets.js', dataType: 'script', cache: true }); 

    $('#lightbox .close').live('click', function(){ 
     $.modal.close(); 
    }); 
} 

它神奇地運行。如何在沒有惱人的隨機提醒的情況下工作?

+4

競爭狀態。您的警報引入了一個延遲,這會給一些其他處理時間首先執行。如果沒有警報,那麼其他進程將在稍後執行。 – 2012-03-01 21:03:53

+3

它看起來像涉及其他代碼的競爭條件。 – 2012-03-01 21:03:57

+0

什麼不起作用? – jrummell 2012-03-01 21:09:51

回答

1

也許你對.live()的使用需要一個完全加載的文檔,並且該警報只是向瀏覽器購買一些額外的時間。嘗試使用$(document).ready();

來源:jQuery-driven app. won't work without alert()

+1

好的建議。如果做不到這一點,一些關於它在不起作用時看到的信息可能會有所幫助。 – 2012-03-01 21:05:24

0

相反的:

<script> 
    system.contextBrowserInit(); 
    //etc 
</script> 

試試這個(HTML文檔類型):

<script defer> 
    system.contextBrowserInit(); 
    //etc 
</script> 

對於XHTML文檔類型正確的語法是

<script defer="defer"> 
    system.contextBrowserInit(); 
    //etc 
</script> 
+0

Defer不是跨瀏覽器可靠的,因爲每個人都以自己的方式實現它。但可能會奏效 – Alfabravo 2012-03-01 21:08:50

相關問題