Jquery 为什么我在IE9中得到的图像完整属性为false?
我见过很多人使用这种模式,但IE9似乎不喜欢它。以下是我的函数的大致功能: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
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。实际上,这是我所期望的,并且我有点