如何使用jQuerys每个检查图像存在

时间:2015-07-31 16:13:13

标签: javascript jquery

我有一些来源让我疯狂......

首先,我有一个这样的对象:

var extensions  = {"jpg":".jpg","JPG":".JPG","png":".png","PNG":".PNG"};

现在我想迭代对象以检查是否存在具有这些扩展之一的图像。其来源如下:

var imgURL  = "some/path/";
var imgName = "myFileName";
var counter = 0; 

$.each(extensions, function( key, imgExtension ){

    var tmpImgUrl = imgURL + imgName + imgExtension;
    console.log('test');
    $( ".imageCheck" ).unbind().attr( "src", tmpImgUrl ).error( function(){
        console.log( tmpImgUrl );
        counter++;
        if( counter >= Object.keys( extensions ).length){
            return false;
        }
    });
});

每个应该采用图像名称并尝试测试每个扩展名是否有错误。实际上它做了它应该做的事情。唯一的问题是,计数器没有计数,控制台日志显示错误。

我表示日志应该是这样的:

test
some/path/myFileName.jpg
test
some/path/myFileName.JPG
test...

等等。但它看起来像:

test
test
test
test
some/path/myFileName.jpg
some/path/myFileName.JPG
...

实际上我想使用图像检查为每个返回一个中断(false),因此不会检查所有扩展。 (性能)

退出检查部分时我真的需要柜台....

有人猜到这里出了什么问题吗?

2 个答案:

答案 0 :(得分:1)

创建一个加载器来进行图像测试。

  1. 初始化field:value进行测试。

  2. 创建index,添加<img>onload行为。 onerror会通知用户,或者您可以让加载程序接受onload的回调来调用它,onload会尝试加载下一个类型的图片。

  3. onerror函数首先检查tryLoad是否等于index,如果是,这意味着所有可能的失败,通知用户图像加载失败,并且一些失败后退或其他东西。

    否则,它使用当前extensions.length与给予fileName和index来创建imagepath,将其设置为url并为下次尝试增加img.src

  4. 致电index开始此过程。

  5. 现在当当前tryload有效时图像会停止尝试,并且将逐个尝试extesions,直到没有其他可以使用。

  6. url

答案 1 :(得分:-3)

你不会想要使用jQuery的.each循环遍历一个对象 - 正确的方法是使用javascript来循环。

循环扩展对象应该如下所示:

 "Error: String types not allowed (at 'layout_marginLeft' with value 'fill_parent')."

然后,您可以使用上述循环结构对这些键或值执行任何操作。