【发布时间】:2013-11-23 05:46:04
【问题描述】:
以下代码将为图像元素注册一个 onerror 函数
(function() {
var imgElements = document.getElementsByTagName('img');
for(i = 0; i < imgElements.length; i++) {
(function() {
imgElements[i].onerror = function() {
this.src = base_url() + 'assets/images/placeholder.jpg';
}
})();
}
})();
此代码仅在某些时候有效。 (我正在使用铬);如果我按住 F5 或快速刷新页面,似乎 onerror 函数没有执行。
例如:如果我加载页面,然后等待几秒钟,然后再次刷新,src 会改变,但不会一直改变。
我认为这是浏览器的某种缓存问题?
更具体地说,如果我按下 chrome 上的刷新图标,一切都会正常工作,即使是突然刷新。
但是,如果我突出显示 URL 并按回车键,代码最终不会将 src 更改为我的占位符图像。
您能否告诉我为什么会发生这种情况,并建议一种方法来规避这种情况?
【问题讨论】:
-
您使用的是
i,但它不是闭包变量,因此它将包含循环中的最后一个值。 -
我已将其更改为传入对象
imgElements[i],它仍然会产生相同的功能。 -
其实这无关紧要。您没有在回调函数中使用
i。我不明白为什么你首先拥有所有这些 IIFE,它们只是让代码更加混乱。 -
我删除了第二个 IIFE
-
您唯一需要的 IIFE 就是外部的 IIFE,这只是为了防止
imgElements污染全局命名空间。
标签: javascript image onerror