2012-03-01 10 views
1

Я сталкиваюсь с этим вопросом время от времени, и я не знаю, как его решить. Вот мой код, который не удается:JavaScript не работает, если я не использую alert()!

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

состояние гонки. Ваше предупреждение представляет задержку, которая дает некоторое другое время выполнения для выполнения. Без предупреждения этот другой процесс будет выполнен позже. –

+3

Похоже, состояние гонки связано с какой-то другой частью вашего кода. –

+0

Что не работает? – jrummell

ответ

1

Возможно, для вашего использования .live() требуется полностью загруженный документ, и предупреждение просто забудет у браузера дополнительное время. Попробуйте окружить $ (document) .ready();

Источник: jQuery-driven app. won't work without alert()

+1

Хорошее предложение. В противном случае некоторая информация о том, что вы видите, когда она не работает, может помочь. –

0

Вместо:

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

Попробуйте это (HTML доктайп):

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

Правильный синтаксис XHTML DOCTYPE является

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

Defer не является кросс-браузерным, поскольку каждый из них реализует его по-своему. Но может работать – Alfabravo

Смежные вопросы