无法访问在jquery load handler中声明的本地javascript变量

时间:2011-08-09 17:35:02

标签: javascript jquery variables scope

我在jQuery .load(function(){...})处理程序中设置了两个局部变量,但我找不到在处理程序之外访问这些变量的方法。我尝试删除var声明,但这不起作用。现在我正在尝试使用return,但我无法让它工作。当我运行代码时,Firefox正在警告“[object HTMLImageElement]”,而不是警告数值。

*我可以在置于处理程序/函数内时验证alert(x)是否有效。

以下代码是对Xavi's solution的修改,用于读取图片的实际尺寸。

var imagepopXY = $("<img/>").attr('src', imagepopSrc).load( function() {
    var x = this.width;
    var y = this.height;
    return [x,y]
});

alert (imagepopXY[0]);

3 个答案:

答案 0 :(得分:1)

imagepopXY包含图像而不是函数!

所以你不能这样称呼它。

如果要定义全局变量,请在函数前定义它们:

var x; var y;

var imagepopXY = $("<img/>").attr('src', imagepopSrc).load( function() {
    x = this.width;
    y = this.height;
});

但这不是一个非常好的代码!

答案 1 :(得分:0)

试试这样:

var imagepopXY = {};

$("<img/>").attr('src', imagepopSrc).load( function() {
    imagepopXY.x = this.width;
    imagepopXY.y = this.height;

});

alert ('X: ' + imagepopXY.x + ' Y: ' + imagepopXY.y);

答案 2 :(得分:0)

imagepopXY将包含图像,正如杰罗姆已经指出的那样。更大的问题是,即使在Mrchief的解决方案中,警报也不会向您显示这些值。为什么?因为在实际加载图像时会触发加载事件,并且在大多数情况下可能会在警报触发后触发(因为您在事件中分配了这些值,其余的代码会不断考虑而不考虑它)。

如果您的应用程序在继续之前需要x和y值,那么最好只在load事件中放入一个函数调用。像这样:

$("<img/>").attr('src', imagepopSrc).load(function() {
  keepWorkingWithTheImage(this.width, this.height);
});

var keepWorkingWithTheImage = function(x, y) {
 // your code is here
 alert(x);
 alert(y);
};