将布尔返回值设置为jQuery函数调用

时间:2015-06-09 16:12:24

标签: jquery

我在这里有一个函数来检查图片的尺寸是否为100 x 100像素,如果是,则返回true

function checkDims(url) {
    var valid = $("<img/>").attr("src", url).load(function() {
        s = { w: this.width, h: this.height };
        if (s.w == 100 && s.h == 100) {
            return true;
        }
        else {
            return false;
        }
    });
    return valid;
}

我想设置一个名为valid的变量,使用.load function to get the image size of a remote URL进行检查,我希望它相应地返回true或false。我知道我将它设置为jQuery对象,但我想从内部函数中获取结果。

我尝试过:

function checkDims(url) {
    var valid;
    $("<img/>").attr("src", url).load(function() {
        s = { w: this.width, h: this.height };
        if (s.w == 100 && s.h == 100) {
            valid = true;
        }
        else {
            valid = false;
        }
    });
    return valid;
}

但是当我调用checkDims函数

时,它给了我undefined作为有效值

所以,如果我打电话

  

var s = checkDims(a_url)

。它会返回

  

未定义

1 个答案:

答案 0 :(得分:1)

您需要将逻辑拆分为两步,因为这是异步调用。

function checkDims(url, callback) {
    $("<img/>").attr("src", url).load(function() {
        callback (this.width == 100 && this.height == 100);   
    }).on("error") { callback(false); });
}

function nextStep(isValid) {
    alert("The image is " + ((isValid) ? "" : "not ") + "valid"
}

checkDims("foo.gif", nextStep);