var urls = [ 'http://loveplus.me/wp-content/uploads/2013/10/hongxing.jpg', 'A', 'B']; function filter(urls) { var len = urls.length - 1; for (var i = 0; i <len; i++) { var img = document.createElement('img'); img.src = urls[i];
img.setAttribute('onerror ',"imgLoadError()"); } } function imgLoadError(){ alert("11111"); }filter(urls);
img.onerror =go();这样会执行函数 ,吧函数的返回值 挂载到方法上。
function go() {
alert("11111");
};或者
img.error = function go() {
alert("11111");
};
你只是 设置 当xxxx得时候 ‘做什么’
‘做什么’ 要到 实际 xxxx得时候才会做
function filter(urls) {
var len = urls.length - 1;
for (var i = 0; i <len; i++) {
var img = document.createElement('img');
img.src = urls[i];
img.setAttribute('onerror ',"imgLoadError()");
}
} function imgLoadError(){
alert("11111");
}filter(urls);
但是img.src = urls[i];的时候不是已经出错了吗,为什么不执行onerror呢?
和 img 的 onload 事件一样,onerror 事件只会被触发一次
你可以尝试在 url 后面加上随机数
mg.src = urls[i] + '?' + Math.random()
但是img.src = urls[i];的时候不是已经出错了吗,为什么不执行onerror呢?
运行次序问题
你设置了
xxxx.onerror
但是在设置的这个for的运行序列里面 并没有触发 任何事件
*************
想象一个场景
你是老板
你给员工分配工作
然后确认
如果工作ok就 ‘加薪’
如果工作不ok就 ‘辞退’你在分配工作的时候 员工并不会被怎么怎么只有到真正确认的时候 才会 怎么怎么不然你在分配工作的时候 员工就 '加薪' 或 '辞退'吗?肯定不是
要员工开始做了之后才会 触发你的 工作确认
你的整个for 就是一个工作分配 和工作确认
本来这样只有最后一次创建的图片元素可以保留,但是img是局部变量,出了filter函数最后一次创建的图片元素还是会被浏览器回收销毁图片元素回收销毁了,自然不会触发事件了
var urls = [ 'http://loveplus.me/wp-content/uploads/2013/10/hongxing.jpg', 'A', 'B'];
for (var i = urls.length; i--;) {
var img = new Image();
img.onerror = function () {
alert("11111");
};
img.src = urls[i];
}
</script>
有说chrome、opera、safari不支持onerror吗?