这是一个有效的测试,用于检查URL是否引用JS / jQuery中的Image

时间:2011-01-12 13:06:40

标签: javascript jquery

$(function() {
    $("<img>", {
        src: "http://goo.gl/GWtGo",
        error: function() { alert("error!"); },
        load: function() { alert("ok"); }
    });
});

How can I test if a URL is a valid image (in javascript)?获得灵感

更新

下一步将是:如何将此逻辑封装到函数中。我试过这个 - &gt; http://jsfiddle.net/wp7Ed/2/

$(function() {
    function IsValidImageUrl(url) {
        $("<img>", {
            src: url,
            error: function() { return false; },
            load: function() { return true; }
        });
    }
    alert(IsValidImageUrl("http://goo.gl/GWtGo"));
    alert(IsValidImageUrl("http://error"));
});

但当然失败了......我如何从内部事件处理程序返回?或者我该如何实现?

2 个答案:

答案 0 :(得分:22)

您无法在javascript中将异步调用转换为同步调用。

errorload是异步事件,所以你必须这样做:

function IsValidImageUrl(url) {
    $("<img>", {
        src: url,
        error: function() { alert(url + ': ' + false); },
        load: function() { alert(url + ': ' + true); }
    });
}

IsValidImageUrl("http://goo.gl/GWtGo");
IsValidImageUrl("http://error");

或者你可以解析你在其他地方定义的回调函数:

function myCallback(url, answer) {
    alert(url + ': ' + answer);
}

function IsValidImageUrl(url,callback) {
    $("<img>", {
        src: url,
        error: function() { callback(url, false); },
        load: function() { callback(url, true); }
    });
}

IsValidImageUrl("http://goo.gl/GWtGo", myCallback);
IsValidImageUrl("http://error", myCallback);

干净且高性能的版本会像这样跳过jQuery开销

function myCallback(url, answer) {
    alert(url + ': ' + answer);
}

function IsValidImageUrl(url, callback) {
    var img = new Image();
    img.onerror = function() { callback(url, false); }
    img.onload =  function() { callback(url, true); }
    img.src = url
}

IsValidImageUrl("http://goo.gl/GWtGo", myCallback);
IsValidImageUrl("http://error", myCallback);

答案 1 :(得分:0)

我认为是的,因为当图片找不到时会触发error事件。与在代码中一样,如果找不到图像(意味着图像不是有效路径),则警报将显示消息error!

以下是它的外观的另一个版本:

$('#imgID').error(function(){
  alert('image not found !');
});

如果以前未找到指定的图像,您也可以更改图像的路径:

$('#imgID').error(function(){
   this.src = 'new path to some image';
});