6

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

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

});

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

但实际上,如果我执行 this.width,我将获得预期的宽度,然后我可以从这里进行某种计算来更改我的 extjs 窗口。

经过一些尝试,我意识到如果我这样做 $(this) 我更改的所有属性似乎根本没有任何效果。

$(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 将 html 文本添加到 DOM 中,从而创建了一个无法通过事件等修改的新对象。

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

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

4

2 回答 2

3

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

于 2012-06-27T17:40:12.197 回答
3

我觉得你应该试试这个...

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

});

假设您只使用 img 标签。如果你有 img 标签的 id,你应该使用例如 $("#idimg).load(fun...... contd.)

于 2012-06-27T17:56:44.770 回答