2013-03-05 1 views
0

У меня есть страница, где я загружаю несколько изображений из Википедии. Изображения Википедии имеют путь к файлу, который вы должны вычислить из имени файла, и который затем необходимо добавить к следующему: http://upload.wikimedia.org/wikipedia/commons/thumb/.Хром застрял на этом коде jquery, FF в порядке

Есть две проблемы.

  1. В меньшинстве фотографий, URL-адрес имеет /en/ вместо /commons/', но нет никакого способа узнать, когда.

  2. Некоторые из ссылок устарели и не возвращают никакого изображения, оставляя меня с уродливым контейнером div.

Так я первый попытке загрузить изображение с commons и написал код, который проверяет, если изображение дает ошибку. Если это так, он заменяет commons на en. Затем, если изображение STILL дает ошибку (это означает, что изображение вообще не существует), код заменяет весь src на '' и скрывает div.

Все это отлично работает с FF, но оно падает в Chrome. Я получаю бесконечные ошибки jquery.min.js:2 Uncaught RangeError: Maximum call stack size exceeded. Если бы кто-нибудь мог сказать мне, что проблема с моим кодом и помочь мне исправить это, я бы очень признателен!

Вот код:

$('#imgid').error(function() 
{ 
    $(this).one("error", function() { 
     $(this).attr('src','');$(this).parent().parent().parent().hide(); 
    }).attr('src', $(this).attr('src').replace("/commons/", "/en/")); 

}); 

ТИА!

EDIT: HTML вокруг изображения выглядит следующим образом:

<div data-id="7551400" class="pin"> 
<div id="sc7551400" class="scrol"> 
<a class="PinIm" target="_blank" name="http://upload.wikimedia.org/wikipedia/commons/c/c0/Cage_de_Faraday.jpg" href=""> 
    <img class="PinImageImg" alt="" src="http://upload.wikimedia.org/wikipedia/commons/thumb/c/c0/Cage_de_Faraday.jpg/155px-Cage_de_Faraday.jpg" style="width:155px" id="img-7551400"> 
    </a> 
     </div> 
     </div> 
+0

Может ли вы чау в HTML, чтобы получить то, что является 'родителем(). parent(). parent() 'element? Возможно, вы захотите использовать '.parents (SELECTOR)' –

+0

Добавил html к вопросу. – Phil

+0

Что делать, если вы попробуете '$ (this) .parents ('. Pin'). Hide();' вместо '$ (this) .parent(). Parent(). Parent(). Hide();' –

ответ

0

Это может быть из-за attr('src', $(this).attr('src'...

Попробуйте это:

$('#imgid').error(function() 
{ 
    var src = $(this).attr('src'); 
    $(this).one("error", function() { 
     $(this).attr('src',''); 
     $(this).parents('.pin').hide(); 
    }).attr('src', src.replace("/commons/", "/en/")); 
}); 
0

Похоже, что вы ставите Chrome в бесконечном цикле, пытающемся заменить src. Я хотел бы предложить что-то вроде этого:

$('img').error(function() 
{ 
    if(this.errorCount == undefined) this.errorCount = 0; 
    if(this.errorCount < 1){ 
     var newSource = $(this).attr('src').replace("/en/", "/commons/"); 
     $(this).attr('src', newSource); 
    } 
    if(this.errorCount == 1){ 
     $(this).parents('div').hide(); 
    } 

    this.errorCount++; 
}); 

это подаст ERRORCOUNT до 0 и после того, как 1-я раза через это скрыть DIV. Вы можете использовать это, чтобы пройти несколько вариантов, если это необходимо.

здесь скрипка, где я изменил Коммонс к общему, так что это будет ошибкой дважды, второй раз через DIV получает скрытое: http://jsfiddle.net/davidstetler/uvKvC/

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