Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/jenkins/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 为什么我在IE9中得到的图像完整属性为false?_Jquery_Internet Explorer 9_Jquery On - Fatal编程技术网

Jquery 为什么我在IE9中得到的图像完整属性为false?

Jquery 为什么我在IE9中得到的图像完整属性为false?,jquery,internet-explorer-9,jquery-on,Jquery,Internet Explorer 9,Jquery On,我见过很多人使用这种模式,但IE9似乎不喜欢它。以下是我的函数的大致功能: function(path){ $("<img/>",{"src":path}).one("load",function(event,alreadyLoaded) { if(!alreadyLoaded) { myObject.loadedImages = myObject.loadedImages

我见过很多人使用这种模式,但IE9似乎不喜欢它。以下是我的函数的大致功能:

function(path){
    $("<img/>",{"src":path}).one("load",function(event,alreadyLoaded) {
        if(!alreadyLoaded) { 
            myObject.loadedImages = myObject.loadedImages || [];
            myObject.loadedImages.push(this);
        }
    // Other code here...                   
    }).each(function() {
        if(this.complete) {
            $(this).trigger("load",true);
        }
    });
}
函数(路径){
$("
我意识到这可能是重复的,但我看到的建议不起作用:
(例如,this.readyState//返回未初始化)

如果有人能给我指出正确的方向,那就太好了。

.one()
适用于每个元素,而不是每个
src
属性或图像文件。因此,如果您创建两个单独的图像元素并调用
.one(“加载”,…)
在这两个映像上,加载事件将为这两个映像触发,即使它们共享一个源并且映像文件本身被缓存

要防止数组中出现重复,请改用哈希:

function addImage (path) { 
    $("<img/>").load(function (e) { 
        myObject.loadedImages = myObject.loadedImages || {};
        if(!this.src in myObject.loadedImages) {  
            myObject.loadedImages[this.src] = this; 
        }
    }).attr({ "src": path });
} 
函数addImage(路径){
$(“
.one()
应用于每个元素,而不是每个
src
属性或图像文件。因此,如果创建两个单独的图像元素并对它们调用
.one(“加载”),则加载事件将为两个图像触发,即使它们共享一个源并且图像文件本身已缓存

要防止数组中出现重复,请改用哈希:

function addImage (path) { 
    $("<img/>").load(function (e) { 
        myObject.loadedImages = myObject.loadedImages || {};
        if(!this.src in myObject.loadedImages) {  
            myObject.loadedImages[this.src] = this; 
        }
    }).attr({ "src": path });
} 
函数addImage(路径){

$(“当您知道只有一个映像时,为什么要使用
每个
?我认为这与您的问题无关,只是好奇而已。我不明白您在这里尝试的是什么。您创建了一个映像元素,分配了一个加载事件,但为什么要自己尝试触发它?不会(或不会)它已经被浏览器本身触发了?@T.J.Crowder使用
每个
只是一种将匿名函数链接到我当前的jQuery对象以确保它运行的方法。@RoToRa我没有分配
加载
,我正在分配
一个
;想法是加载应该每个图像只运行一次。因此,当再次创建此图像时d不应运行,因为映像已缓存。匿名函数仍在运行,并将使用参数
alreadyLoaded
触发加载,该参数阻止我再次将其添加到对象中,但仍允许我运行
//此处的其他代码
通知其他对象此映像的“readynes”…这有意义吗?为什么当您知道只有一个映像时,请使用每个
?我认为这与您的问题无关,只是好奇而已。我不明白您在这里尝试的是什么。您创建了一个映像元素,分配了一个加载事件,但为什么要自己尝试触发它?不会(或不会)它已经被浏览器本身触发了?@T.J.Crowder使用
每个
只是一种将匿名函数链接到我当前的jQuery对象以确保它运行的方法。@RoToRa我没有分配
加载
,我正在分配
一个
;想法是加载应该每个图像只运行一次。因此,当再次创建此图像时d不应运行,因为映像已缓存。匿名函数仍将运行,并将使用参数
alreadyLoaded
触发加载,该参数阻止我再次将其添加到对象中,但仍允许我运行
//此处的其他代码
通知其他对象此映像的“readynes”…这有意义吗?Ver很好的解决方案!哦,是的,我意识到我在
.one()上写了我的评论
糟糕的是,凌晨2:00调试IE会对一个人造成这样的影响…因此,也感谢你纠正了这一点。请不要因为我还没有将此作为答案而怨恨,…我真的想知道
complete
属性是否有缺陷/为什么有缺陷。不过,这很好地回答了我的另一个问题。其他浏览器不会启动加载但是第二次事件…所以这仍然必须与我的
complete
属性检查一起使用。@bodine-
complete
属性并不是真正的错误,只是在浏览器之间不一致。IE在触发
load
事件之前不会将
complete
设置为true。实际上,这是我所期望的,并且我有点惊讶其他浏览器在触发
load
事件之前将
complete
设置为true。无论如何,是的,
load
事件将为所有浏览器触发,而不会显式触发它,即使
complete==true
。记住
load
事件是针对元素的,而不是针对文件的(嗯,不仅仅是文件)。此演示显示,即使是缓存图像也会触发加载:从页面上列出的警告中,我得到的印象是,双向检查是一个好主意,尽管我很难找到表现出这种不一致性的用例。大型图像可能…无论哪种方式,这都是对
完整
pr的期望值的一个好点“不动产”。@bodine-这是一本有趣的读物……回想起来,我记得以前读过。我有兴趣看到对它的更深入的讨论。我认为困难来自于更改现有图像元素的src,
load
会对所有新元素始终如一地触发,但我可能是错的。一个不重要的原因是最重要的事情是在设置
src
之前绑定
load
。我将更新我的答案以反映这一点。非常好的解决方案!哦,是的,我意识到我在
上写了我的评论。one()
糟糕的是,凌晨2:00调试IE会对一个人造成这样的影响…因此,也感谢你纠正了这一点。请不要因为我还没有将此作为答案而怨恨,…我真的想知道
complete
属性是否有缺陷/为什么有缺陷。不过,这很好地回答了我的另一个问题。其他浏览器不会启动加载但是第二次事件…所以这仍然必须与我的
complete
属性检查一起使用。@bodine-
complete
属性并不是真正的错误,只是在浏览器之间不一致。IE在触发
load
事件之前不会将
complete
设置为true。实际上,这是我所期望的,并且我有点