2010-04-30 5 views
2

В подобной проблеме, как этот:JQuery цикл терпит неудачу на странице Refresh

Jquery Cycle + Firefox Squishing Images

мне удалось преодолеть исходную задачу, используя Джеффс ответ в приведенной выше ссылке.

Однако теперь я заметил новую ошибку, при обновлении страницы она просто не работает. Я пробовал жесткое обновление (ctrl + F5), но это не работает.

Однако, когда вы приходите страницы на страницу, она загружается штрафом.

здесь моя модифицированная версия (взято из Джеффа):

<script type="text/javascript"> 
$(document).ready(function() 
{ 
var imagesRemaining = $('#slideshow img').length; 
$('#slideshow img').bind('load', function(e) 
    { 
     imagesRemaining = imagesRemaining - 1; 
     if (imagesRemaining == 0) 
      { 
       $('#slideshow').show(); 
       $('#slideshow').cycle({ 
        fx: 'shuffle', 
        speed: 1200 
       }); 
      } 
    }); 
}); 
</script> 

Есть идеи? Я также пробовал JQuery Live, но не смог реализовать его правильно. Я также пробовал метатеги, чтобы заставить изображения загружаться. Но он работает только в первый раз.

+0

Спасибо, что я отредактировал свою запись: O) – Darknight

+0

Я вынул теги ASP.NET, так как у них нет видимого подключения к этой проблеме. – Tomalak

+0

Просто мысль - зачем вам вообще обращаться с обратной почтой?Как правило, использование пост-спинов с «очередями» JavaScript и «циклами» - это кошмар. Гораздо проще настроить ваш скрипт для работы на странице-загрузке (как вы обнаружили), чем «фактор-в» пост-обратно. Если вы используете jQuery, не можете ли вы использовать AJAX для обработки вызовов на сервер/db, а не после обратной связи? Простите меня, если я лаю неправильное дерево - просто мысль. – LiverpoolsNumber9

ответ

0

Наконец Решено:

Большого спасибо за все предложения,

ссылается на 'LiverpoolsNUmber9' оказалось плодотворным:

How to tell whether the $(window).load()/window.onload event has already fired?

я использовал тушеное мясо Javascript, таким образом, :

<script type="text/javascript"> 
    $.windowLoaded(function() { 
     DoCycle(); 
    }); 

function DoCycle() { 
    $('#slideshow').show(); 
    $('#slideshow').cycle({ 
     fx: 'shuffle', 
     speed: 1200 
    }); 
} 
</script> 

Проблема заключается в том, что изображения (которые являются большими) были взяты за время загрузки, а JQuery запускался, когда DOM был готов. Но только потому, что загруженный DOM не означал, что изображения готовы!

На всякий случай другие похожие проблемы с большими изображениями.

3

Вместо этого:

$(document).ready(function() { }); 

Используйте это:

$(window).load(function() { }); 

В этом случае вы хотите, чтобы ваши изображения для загрузки. Из вашего вопроса кажется, что он работает только тогда, когда изображения готовы, например. мгновенно загружается из кеша. Это дождитесь загрузки изображений перед выполнением.

+0

Согласовано - но стоит проверить эту ссылку, так как это все еще не будет работать в кросс-браузере - http://stackoverflow.com/questions/896083/jquery-javascript-how-to-tell-if-the -window-load-window-onload-event-has-al – LiverpoolsNumber9

+0

@ LiverpoolsNumber9 - Я не верю, что здесь правильно, так как это встроенный скрипт, а не включаемый файл (который также должен блокироваться), как это могло бы быть закончили загрузку, если она еще не запускала этот встроенный блок сценариев? –

1

Или же вы можете использовать:

$ (окно) .load (функция() {

// блабла

});

Это тоже работает.

0

$ .windowLoaded() похоже, является плагином JQuery, в отличие от прямой части библиотеки, поэтому я бы предложил использовать $ (window) .load();

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