jquery.width возвращает 0 на изображении

Я использую код, который выглядит так:

img.load(function(){
    // do some stuff
    $(this).width();

});

В моем обратном вызове размер изображения всегда равен 0. Это может иметь какое-то отношение к этому, но мои изображения загружаются локально.

Но на самом деле, если я сделаю this.width, я получу ожидаемую ширину, а затем смогу выполнить какие-то вычисления, чтобы изменить свое окно extjs.

После некоторых попыток я понял, что если я сделаю $(this), то все атрибуты, которые я изменю, не окажут никакого эффекта.

выполнение $(this).width(40);не изменит ширину моего изображения, но выполнение this.width = 40изменит ширину моего изображения. Это как если бы выполнение $(this)копировало мой HTMLImageElement в новый элемент, и эти изменения применялись бы только в том случае, если бы я снова добавил в дом, чтобы заменить старый.

Я не уверен, что понимаю, что там происходит.

Редактировать

Это то, что содержит моя переменная img.

img = $('<img>');
img.attr('src', '....image');

Правка 2

Это на самом деле не меняет того факта, что jQuery не обрабатывает размер изображения для изображений в памяти, но я подумал, что всем, кто использует Extjs, будет полезно не повторять мою ошибку. Одна из больших проблем в моем случае заключается в том, что объект img, который я использовал, был допустимым объектом, но, поскольку я использую ExtJ, я непреднамеренно совершил глупую ошибку. Я создал свое окно таким образом...

Ext.create('Ext.Window', 
  // some settings
  items: [{
      html: img.wrap('<div>').parent().html(),
  // etc

Другими словами, событие, которое я создал, было в img, но я никогда не добавлял imgв DOM. ExtJs добавил html-текст в DOM, который создал новый объект, который нельзя изменить с помощью события и так далее.

Поэтому мне нужно создать идентификатор, чтобы найти новый элемент, и все это должно быть сделано после вызова modalWindow.show(). После этого все работает идеально.

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

6
задан Loïc Faure-Lacroix 28 June 2012 в 13:57
поделиться