Jquery .width () возвращает 0 ноль, прежде чем добавить изображение в браузер - PullRequest
1 голос
/ 12 июля 2011

Я использую jquery и пытаюсь создать слайд-шоу.

Прежде чем я добавлю изображение , я должен знать Ширина изображения . Поэтому я использую .width () jquery и .attr ("width").

Мой код выглядит следующим образом:

var attr_href = $next.attr('href'); /*returns the href of the image*/
var $item = $('<img src="'+attr_href+'" />'); 

//$item contains the image, the image is not displayed to the browser yet!!!

var itemWidth = $item.width();
alert(itemWidth); 
// --->  returns zero 0 in Mozilla and in IE

var itemWidth2 = $item.attr("width");
alert(itemWidth2);
//In Mozilla, the first time it returns 0.After the image is loaded, it returns the right Width
//In IE, always returns 0 zero !!!

//Now i have to append the photo and i have to use the right Width of the image!!!
var final_img = $('<img src="'+attr_href+'" width="'+itemWidth+'"/>');
$('.SlideShow').append(final_img);

Итак, я попытался использовать .load () , и я сделал:

var attr_href = $next.attr('href'); /*returns the href of the image*/
var $item = $('<img src="'+attr_href+'" />'); 

//$item contains the image, the image is not displayed to the browser yet!!!

$item.load(function  () {
    var WidthAfterLoading = $item.attr("width");
    var WidthAfterLoading2 = $item.width();

});

alert(WidthAfterLoading);  //returns "undefined" in both IE and Mozilla
alert(WidthAfterLoading2); //returns "undefined" in both IE and Mozilla

Итак, прежде чем я добавлю изображение в браузер, я должен знать правильную ширину изображения. Но я получаю ноль (0) и не определено.

Есть ли другой способ, чтобы взять правильную ширину изображения ??

Спасибо, заранее

Ответы [ 2 ]

7 голосов
/ 12 июля 2011

Ах, у меня была такая же проблема раньше.

<img id="someImage"></img>

Тогда в вашем JQuery

$("#someImage").attr("src", "url/to/img").load(function() {  
    var width = $(this).width();
    // do stuff!
});

И, конечно, скрипка

0 голосов
/ 08 августа 2013

Это потому, что элементы не прикрепляются к дереву DOM.
попробуйте прикрепить элементы к DOM перед вызовом .width ()

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