#jquery
#jquery
Вопрос:
в jQuery я загружаю некоторый HTML-код в div, подобный этому:
$("#test").html("Hello <img src='pic.jpg'>");
Есть ли способ узнать, полностью ли загружен HTML-код?
Я имею в виду, что я установил содержимое, но для загрузки изображения требуется некоторое время.. Я хотел бы подождать, пока не будет загружен весь HTML…
Я мог бы использовать $(«img»).load(… но это не работает для содержимого, загруженного с помощью $.html Есть другие идеи?
Спасибо
Комментарии:
1. Вы могли бы предварительно загрузить (в JS) изображение и
onload
запустить свой jQuery.
Ответ №1:
$("#test").html("Hello <img class='futureImg' src='pic.jpg'>");
$(".futureImg").live('load',function () { alert('lalala');});
Комментарии:
1. Я думаю, что ответ @Royi Namir лучше 🙂
2.jsFiddle не является чистой средой разработки. это утверждение также не работает, и оно должно
$('body').load(function () { alert('lalala');});
jsfiddle.net/FPu4P/4
Ответ №2:
попробуйте:
$('#test').html("Hello <img src='pic.jpg'>").load(function(){
// Ur task when it loaded.
});
Комментарии:
1. Я получаю
Uncaught TypeError: e.indexOf is not a function at w.fn.init.w.fn.load
при использовании этого.
Ответ №3:
Вы могли бы использовать обработчик JS Image
onload
и добавить туда разметку:
$("#btn").click(function(){
var img = new Image();
alert('onclick');
img.onload = function(){
$("#mycontent").html("<img class='futureImg' src='http://upload.wikimedia.org/wikipedia/commons/6/67/Rita_25_sept_2005_1640Z.jpg'>");
alert('onload');
}
$("#mycontent").html("Image loading...");
img.src = 'http://upload.wikimedia.org/wikipedia/commons/6/67/Rita_25_sept_2005_1640Z.jpg';
});
Обратите внимание, изображение будет кэшироваться после открытия в первый раз. Это довольно большое изображение, поэтому загрузка может занять минуту или две.
Редактировать
И вы действительно могли бы одновременно выполнять .html()
добавление и кэш JS (насколько я могу судить):
$("#btn").click(function(){
// Just so the image is not cached
var r = Math.floor(Math.random()*1111111111);
var url = 'http://upload.wikimedia.org/wikipedia/commons/6/67/Rita_25_sept_2005_1640Z.jpg?' r;
var img = new Image();
alert('onclick');
img.onload = function(){
alert('onload');
}
$("#mycontent").html("<img class='futureImg' src='" url "'>");
img.src = url;
});
Ответ №4:
почему вы не используете .ready()
?
Документация:http://api.jquery.com/ready /
Ответ №5:
Хитрость заключается в том, чтобы настроить прослушиватель событий, прежде чем направлять <img>
на файл:
$("#test").html ("Hello <img />");
var newImg = $("#test > img");
newImg.load( function () {
alert ('Success!');
} ).attr ('src', 'pic.jpg');
Ответ №6:
$("#test").load(function() {
//your code after #test loaded
});
Ответ №7:
$("#test").html('Hello <img src="pic.jpg">').find('img').load(...)
Комментарии:
1. спасибо, но он запустится, даже если img не загружен. Я имею в виду, может быть, он загружен в память, но пока не виден.
Ответ №8:
Другим решением, еще не упомянутым на этой странице, было бы использование отложенных объектов jQuery следующим образом:
var rq_html = $.get('.../somepage.html');
var rq_img = $.get('.../img/someimg.jpg');
$.when(rq_html, rq_img).then(function()
{
// both requests completed, append received html into DOM
// and either rely on cache or insert img manually
}, function()
{
// this function is failure handler in case one of the requests fails
// the other request may still be pending at this point,
// you might want to cancel it or handle the situation in another way...
});