Возможно, простое решение, но я застрял, и уже поздно ...:)
$j('#thisImage').html('<img src="image.jpg" id="box" />');
var imgWidth = $j('#box').width();
Когда я делаю console.log(imgWidth)
, он возвращается 0
...
Я почти уверен, что это потому, что .html(...)
не полностью завершен до того, как вызов width(...)
сработает. Я протестировал его с кэшированными изображениями, и он отлично работает и дает мне правильную ширину изображения ... но те, которые не кэшированы, возвращают 0.
Так что я ищу хорошее решение, которое ждет завершения вызова .html(...)
, прежде чем перейти к моему .width(...)
вызову
Любая помощь очень ценится. Thx!
ОБНОВЛЕНИЕ 1
Используя ответ CMS ниже ... (и это может помочь всем понять мою дилемму)
Если я сделаю это:
var imgWidth = 0;
$j('<img src="image.jpg" id="box" />').appendTo("#thisImage").load(function() {
imgWidth = $j('#box').width();
//my first log
console.log("Width 1: " + imgWidth);
});
//my second log
console.log("Width 2: " + imgWidth);
if (imgWidth > 100) {
//do something
}
Затем //my second log
возвращается до //my first log
, так как .load
еще не закончил ...
таким образом, мое if
утверждение всегда false
, так как imgWidth
всегда 0
...
до тех пор, пока .load
не завершится ... но тогда будет слишком поздно ...
ОБНОВЛЕНИЕ 2: СМОТРЕТЬ, ЧТО Я ВИДЮ
Используя модификацию ответа Райана ...
Перейдите на jsbin.com -> Включить "jquery" из выпадающего меню -> Заменить w / ниже на вкладке Javascript и затем нажмите Вкладка «Вывод»
function loadImg(url, func) {
var img = new Image();
img.onload = func;
img.src = url;
return img;
}
$(document).ready(function() {
var myWidth = 0;
var myImg = loadImg("http://sstatic.net/so/img/logo.png", function() {
myWidth = $(this).width();
$('#hello').append("Show Me First: " + myWidth + "<br />");
});
$(myImg).appendTo("body");
if(myWidth > 0) {
$('#hello').append("Success!");
} else {
$('#hello').append("Show Me Second: " + myWidth + " <- BOO! Out of Order! <br />");
}
});