JQuery не будет работать, пока я не обновлю страницу, т.е. 8-9 - PullRequest
0 голосов
/ 08 июня 2011

Привет следующий код, чтобы найти отсутствующие изображения, удалить содержащие элементы

и затем запустить плагин карусели.

это работает без проблем в Firefox, Chrome и т. Д., Но, похоже, застревает в то есть 8 и 9 (кажется, 7 работает), пока я не обновлю страницу.

пример страницы http://www.owenarchitects.co.uk/project_010.php

код, который я использую, это

$(function(){

  var startCarousel, imgCount = $('img').length;

  startCarousel = function() {
    if (imgCount === 0) {

      $("div.foo").carousel(); // TODO adjust this to match the way you start your carousel

    }
  }  

  $('img').load(function() {
    imgCount--;
    startCarousel();
  })

  .error(function() {
    imgCount--;
    $(this).parent().remove();
    startCarousel();
  }); 
}); 

Спасибо!

Ответы [ 2 ]

0 голосов
/ 08 июня 2011

Редактировать 2:

A Поиск в Google содержит множество страниц, посвященных обнаружению отсутствующих изображений и их удалению.Существует даже StackOverflow вопрос для того же.Основная предпосылка - использовать для этого функцию .error . Это то, что вы уже делаете в опубликованном вами скрипте. Итак, полагаться на .load () не нужно.Документация .error не содержит никаких предупреждений, и никто не опубликовал недавние проблемы с его реализацией ...


Редактировать 1:

Случайный поиск в Google каруселей на основе jquery привел меняна этот ... http://www.thomaslanciaux.pro/jquery/jquery_carousel.htm

Проверьте эту скрипку.http://jsfiddle.net/yvE2c/ ... он использует ваши изображения, простой html и очень простую инициализацию карусели ... он также работает в режимах браузера IE7-9 ... Если вам явно не нужна функциональность .load для чего-то другого, подумайтеиспользуя эту или другую простую в использовании карусель ...


Я посмотрел вашу тестовую страницу в IE9.Переключил режим рендеринга браузера с IE7 на IE9.Он никогда не работал при первом запуске в любом режиме браузера.Даже после первого запуска, после того как изображения кэшируются, если вы обновляете несколько раз одно за другим, они не будут последовательно запускаться последовательно ... Я не совсем уверен, в чем проблема, но читая документацию jquery для.load () Я заметил следующий комментарий

Не знаю о Gecko, но, по крайней мере, в Opera .load () не запускается для изображений, которыеуже лежат в кеше браузера ... пишут что-то вроде

$ ("# myImg"). one ("load", function () {// сделать что-то}) .each (function () {if(this.complete) $ (this) .trigger ("load");});

, кажется, решает проблему.

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

В документации также перечислены следующие предостережения

Предупреждения о событии загрузки при использовании с изображениями

Распространенная задача, которую разработчики пытаются решить с помощью ярлыка .load (), заключается в выполнении функции, когда изображение (или коллекция изображений) полностью загружено.Есть несколько известных предостережений с этим, которые следует отметить.Это:

It doesn't work consistently nor reliably cross-browser
It doesn't fire correctly in WebKit if the image src is set to the same src as before
It doesn't correctly bubble up the DOM tree
Can cease to fire for images that already live in the browser's cache

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

0 голосов
/ 08 июня 2011

Звучит так, будто не работает, потому что startCarousel в событиях загрузки и ошибки img не определяется до тех пор, пока страница не будет загружена.При обновлении страница кэшируется и загружается быстрее, поэтому метод будет определен.

Чтобы проверить это, можете ли вы указать $('img').load и .error в объявлении $(function(){?Я понял, что, вероятно, не хочу, чтобы ты хотел закончить ... но я хотел бы убедиться, что моя догадка верна, прежде чем давать какие-либо другие конкретные ответы.

...