为什么onerror事件不工作的img标签,当jquery放在页脚
Why does onerror event not work for img tag when jquery is put in footer?
考虑以下示例
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<style>
img {
max-width:600px;
}
</style>
<script src="https://code.jquery.com/jquery-3.1.0.js"></script>
</head>
<body>
<div><img class="myimage" src="http://www.planwall.com/lk.jpg" alt="org"></div>
<div><img class="myimage" src="http://www.planwer.com/my.jpg" alt="org"></div>
<div><img class="myimage" src="http://www.plwallpaper.com/static/images/slkdl.png" alt="org"></div>
<div><img class="myimage" src="http://www.pnwallpaper.com/static/images/er5.png" alt="org"></div>
<div><img class="myimage" src="http://www.planwlpaper.com/static/images/3col.png" alt="org"></div>
<div><img class="myimage" src="http://www.planaper.com/sttic/images/fghdfg.png" alt="org"></div>
<div><img class="myimage" src="http://www.pwalper.com/sttic/imaes/3dsfgdg45.png" alt="org"></div>
<div><img class="myimage" src="http://www.planwallpaper.com/static/images/34rt5.png" alt="org"></div>
<div><img class="myimage" src="http://www.planwaaper.com/static/images/7004205-cool-black-backgrounds-27640_lhK8IKI.jpg" alt=""></div>
<div><img class="myimage" src="http://www.wallpeast.com/wallpaper-cool/page/4#static/images/free-cool-wallpaper-17426-18158-hd-wallpapers.jpg" alt=""></div>
<script>
/*
for(var i=0; i<document.getElementsByTagName("img").length; i++) {
document.getElementsByTagName("img")[i].addEventListener("error", function() {
this.src = "https://cdn.colorlib.com/wp/wp-content/uploads/sites/2/404-not-found-error-page-examples.png";
});
}
*/
</script>
<script>
$(document).ready(function(){
$("img").on("error", function(){
$(this).attr( "src", "http://www.freeiconspng.com/uploads/error-icon-28.png" );
});
});
</script>
</body>
</html>
所有图片默认url错误。error
事件分配给所有img
标签。改变得到错误的图像的src
。一切正常。问题是,如果我把jquery cdn在页脚然后src属性不被替换。下面的例子:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<style>
img {
max-width:600px;
}
</style>
</head>
<body>
<div><img class="myimage" src="http://www.planwall.com/lk.jpg" alt="org"></div>
<div><img class="myimage" src="http://www.planwer.com/my.jpg" alt="org"></div>
<div><img class="myimage" src="http://www.plwallpaper.com/static/images/slkdl.png" alt="org"></div>
<div><img class="myimage" src="http://www.pnwallpaper.com/static/images/er5.png" alt="org"></div>
<div><img class="myimage" src="http://www.planwlpaper.com/static/images/3col.png" alt="org"></div>
<div><img class="myimage" src="http://www.planaper.com/sttic/images/fghdfg.png" alt="org"></div>
<div><img class="myimage" src="http://www.pwalper.com/sttic/imaes/3dsfgdg45.png" alt="org"></div>
<div><img class="myimage" src="http://www.planwallpaper.com/static/images/34rt5.png" alt="org"></div>
<div><img class="myimage" src="http://www.planwaaper.com/static/images/7004205-cool-black-backgrounds-27640_lhK8IKI.jpg" alt=""></div>
<div><img class="myimage" src="http://www.wallpeast.com/wallpaper-cool/page/4#static/images/free-cool-wallpaper-17426-18158-hd-wallpapers.jpg" alt=""></div>
<script>
/*
for(var i=0; i<document.getElementsByTagName("img").length; i++) {
document.getElementsByTagName("img")[i].addEventListener("error", function() {
this.src = "https://cdn.colorlib.com/wp/wp-content/uploads/sites/2/404-not-found-error-page-examples.png";
});
}
*/
</script>
<script src="https://code.jquery.com/jquery-3.1.0.js"></script>
<script>
$(document).ready(function(){
$("img").on("error", function(){
$(this).attr( "src", "http://www.freeiconspng.com/uploads/error-icon-28.png" );
});
});
</script>
</body>
</html>
问题很简单:
为什么
onerror
事件不工作的img
标签时,把jquery在页脚?
当我查看控制台时,10个图像中只有3或4个图像收到错误,其他图像附加[18ms]
或其他时间,如' [21ms]等
你的代码不工作,因为错误事件引发之前你的jquery处理程序绑定。
浏览器加载在dom中找到的项。所以当你在最后添加jquery脚本时。浏览器将已经开始加载它们上面的img标签。当jQuery加载、解析、文档准备好、处理程序绑定时,大多数图像可能已经错误或加载。
下面的代码将工作,因为在文档准备好之后,它会在内存中创建一个img项来检查图像是否正确加载。如果添加了其他图像,则由处理程序处理。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<style>
img {
max-width:600px;
}
</style>
</head>
<body>
<div><img class="myimage" src="http://www.planwall.com/lk.jpg" alt="org"></div>
<div><img class="myimage" src="http://www.planwer.com/my.jpg" alt="org"></div>
<div><img class="myimage" src="http://www.plwallpaper.com/static/images/slkdl.png" alt="org"></div>
<div><img class="myimage" src="http://www.pnwallpaper.com/static/images/er5.png" alt="org"></div>
<div><img class="myimage" src="http://www.planwlpaper.com/static/images/3col.png" alt="org"></div>
<div><img class="myimage" src="http://www.planaper.com/sttic/images/fghdfg.png" alt="org"></div>
<div><img class="myimage" src="http://www.pwalper.com/sttic/imaes/3dsfgdg45.png" alt="org"></div>
<div><img class="myimage" src="http://www.planwallpaper.com/static/images/34rt5.png" alt="org"></div>
<div><img class="myimage" src="http://www.planwaaper.com/static/images/7004205-cool-black-backgrounds-27640_lhK8IKI.jpg" alt=""></div>
<div><img class="myimage" src="http://www.wallpeast.com/wallpaper-cool/page/4#static/images/free-cool-wallpaper-17426-18158-hd-wallpapers.jpg" alt=""></div>
<script>
/*
for(var i=0; i<document.getElementsByTagName("img").length; i++) {
document.getElementsByTagName("img")[i].addEventListener("error", function() {
this.src = "https://cdn.colorlib.com/wp/wp-content/uploads/sites/2/404-not-found-error-page-examples.png";
});
}
*/
</script>
<script src="https://code.jquery.com/jquery-3.1.0.js"></script>
<script>
$(document).ready(function(){
$("img").each(function(i,ele){
$("<img/>").attr("src",$(ele).attr("src")).on('error', function() {
$(ele).attr( "src", "http://www.freeiconspng.com/uploads/error-icon-28.png" );
})
});
$("img").on("error", function(){
$(this).attr( "src", "http://www.freeiconspng.com/uploads/error-icon-28.png" );
});
});
</script>
</body>
</html>
jquery using with class所以你可以使用。myimage
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<style>
img {
max-width:600px;
}
</style>
</head>
<body>
<div><img class="myimage" src="http://www.planwall.com/lk.jpg" alt="org"></div>
<div><img class="myimage" src="http://www.planwer.com/my.jpg" alt="org"></div>
<div><img class="myimage" src="http://www.plwallpaper.com/static/images/slkdl.png" alt="org"></div>
<div><img class="myimage" src="http://www.pnwallpaper.com/static/images/er5.png" alt="org"></div>
<div><img class="myimage" src="http://www.planwlpaper.com/static/images/3col.png" alt="org"></div>
<div><img class="myimage" src="http://www.planaper.com/sttic/images/fghdfg.png" alt="org"></div>
<div><img class="myimage" src="http://www.pwalper.com/sttic/imaes/3dsfgdg45.png" alt="org"></div>
<div><img class="myimage" src="http://www.planwallpaper.com/static/images/34rt5.png" alt="org"></div>
<div><img class="myimage" src="http://www.planwaaper.com/static/images/7004205-cool-black-backgrounds-27640_lhK8IKI.jpg" alt=""></div>
<div><img class="myimage" src="http://www.wallpeast.com/wallpaper-cool/page/4#static/images/free-cool-wallpaper-17426-18158-hd-wallpapers.jpg" alt=""></div>
<script>
/*
for(var i=0; i<document.getElementsByTagName("img").length; i++) {
document.getElementsByTagName("img")[i].addEventListener("error", function() {
this.src = "https://cdn.colorlib.com/wp/wp-content/uploads/sites/2/404-not-found-error-page-examples.png";
});
}
*/
</script>
<script src="https://code.jquery.com/jquery-3.1.0.js"></script>
<script>
$(document).ready(function(){
$(".myimage").on("error", function(){
$(this).attr( "src", "http://www.freeiconspng.com/uploads/error-icon-28.png" );
});
});
</script>
</body>
</html>
相关文章:
- Jquery标签插件粘贴问题
- 谷歌地图jquery标签未加载
- 选择带有 jQuery 标签的“li”项时出错
- 莫里斯.js甜甜圈标签不在中间的jquery标签中
- 花哨的jQuery标签选择器
- 为什么这个网站返回包装在jQuery标签中的自动完成数据
- Jquery标签删除导致换行
- jQuery标签-它,如何执行post时,项目删除
- jQuery标签“未定义不是一个函数”
- 修改jQuery标签插件,在加载时显示特定的标签[includes JSFiddle]
- 使用jQuery标签和滑动图像库(simplyScroll)
- 如何在加载新页面时启用jquery标签/单选按钮
- 未捕获的ReferenceError: $没有为jQuery标签定义
- jQuery标签在另一个jQuery标签- OnActivate事件
- 自动显示标签内容的页面加载- jQuery标签
- JQuery标签:如何显示'Loading. '消息# 39;等待AJAX HTTP请求响应
- 我的jquery标签代码有什么问题?
- URL阻止功能中的Jquery标签
- Jquery标签添加删除
- jQuery标签'for'属性选择器