Подтвердить что ты не робот

Jquery callback при загрузке изображения при изменении src

Я меняю img src, как только я загрузил json файл, все это прекрасно работает. Но я хочу убедиться, что изображение полностью загружено. Что я могу сделать, используя:

     .one("load",function(){ 
                alert("image has load yay");
            });

Но после чтения различных сообщений, которые не все браузеры запускают загрузку, если изображение находится в кеше. Похоже, я не понимаю эту проблему в браузере, которая призвана вызвать эту проблему. Но я тестировал только FF (6.0.2), Chrome (13.0.7) и Safari (5.0.5) на mac. Теперь я уверен, что у IE должна быть проблема, и это связано только с ПК. У меня запущены довольно свежие версии браузеров, поэтому в них теперь что-то изменилось, и теперь возникает пожар. Или моя другая мысль заключается в том, что я запускаю последнюю версию jquery (1.6.3).. Была изменена?

Я надеюсь, что все это будет связано с запуском последнего jquery, но если нет, и это более старая проблема с браузером, тогда мне нужно исправить ошибку. Я попробовал пару решений на этом сайте, например: jQuery загрузка изображений с полным обратным вызовом А также некоторые комментарии на странице .load api: http://api.jquery.com/load-event/#comment-30211903

Но я не могу заставить их работать. Первый не работает вообще, а второй, похоже, падает на .each().

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

$.getJSON(jsonURL, function(json) {         
    $("a.imgZoom img").attr("src", json[imageID].largeImage).one("load",function(){ 
         alert("the image has loaded");
    //do something here
    });
$("a.imgZoom").attr("href", json[imageID].largeImage);
})  

Заранее благодарим за помощь.

В

4b9b3361

Ответ 1

Основываясь на некоторых тестах, которые я провел около года назад, я не нашел надежного способа получить событие загрузки при изменении .src изображения с одного значения на другое. Таким образом, мне пришлось прибегать к загрузке нового изображения и замене того, что у меня было с новым, когда загружалось новое изображение. Этот код успешно работает на нескольких сотнях веб-сайтов (он используется слайд-шоу) примерно через год, поэтому я знаю, что он работает.

Если вы установите обработчик нагрузки, прежде чем вы установите свойство .src на новом изображении, вы надежно получите событие загрузки. Здесь некоторый код, который я написал ранее ранее для захвата события загрузки: jQuery: как проверить, загружены ли все изображения в массиве?.

Этот код, который прикрепляет обработчик событий до тех пор, как .src работает для меня в современных браузерах, в которых я его пробовал (я не тестировал старые браузеры):

    $("img").one("load", function() {
        // image loaded here
    }).attr("src", url);

Вы можете увидеть, как он работает здесь: http://jsfiddle.net/jfriend00/hmP5M/, и вы можете протестировать любые браузеры, которые хотите использовать, с помощью jsFiddle. Просто нажмите на изображение, чтобы загрузить его. Он циклически проходит три разных изображения (каждый раз устанавливая .src), каждый раз загружая два из них каждый раз (никогда из кеша) и один из кеша, чтобы проверить оба случая. Он выдает сообщение msg на экран всякий раз, когда вызывается обработчик .load, чтобы вы могли видеть, вызвал ли он.