jquery.width在图像上返回0

时间:2012-06-27 17:35:26

标签: javascript jquery extjs

我正在使用看起来像这样的代码:

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

});

在我的回调中,图像大小始终为0.它可能与它有关,但我的图像是本地加载的。

但实际上,如果我这样做。宽度,我会得到预期的宽度然后我可以从这里做一些计算来改变我的extjs窗口。

经过一些尝试,我意识到如果我做$(这个)我改变的所有属性似乎都没有任何影响。

执行$(this).width(40);不会改变图像的宽度,但执行this.width = 40会改变图像的宽度。就好像在$(this)中复制我的HTMLImageElement在一个新元素中,只有当我再次添加到dom中以替换旧元素时才会应用这些更改。

我不太了解那里发生了什么。

修改

这是我的img变量包含的内容。

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

修改2

这并没有真正改变jQuery无法处理内存映像中图像大小的事实,但我觉得使用Extjs的任何人都不会重复我的错误。我的一个大问题是我使用的img对象是一个有效的对象,但由于我使用的是ExtJs,我无意中犯了一个愚蠢的错误。我这样创建了我的窗口......

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

换句话说,我创建的事件是在img上,但我从未真正将img添加到DOM中。 ExtJs向DOM添加了html文本,创建了一个无法通过事件修改的新对象,依此类推。

所以我必须创建一个id来查找新元素,所有这一切都必须在调用modalWindow.show()之后完成。之后一切都很完美。

要调整窗口大小,如果设置了尺寸,您可以将它们设置回null并在窗口上执行doLayout调用,它将重新计算窗口大小。

2 个答案:

答案 0 :(得分:3)

您发现jQuery(this).width()不适用于内存中的图像。选择是使用this.width / height或将其附加到页面并阅读。

答案 1 :(得分:3)

我想你应该试试这个......

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

});

假设您仅使用img标记。如果您的id为img标签,那么您应该使用例如$(“#idimg).load(fun ...... contd。)