Javascript 错误事件
我知道这是一个很难回答的问题,但在圣诞节过后,我似乎很难让自己的大脑恢复正常 简单的问题,我正在使用jQuery.error事件来替换使用这段脚本破坏的图像Javascript 错误事件,javascript,jquery,Javascript,Jquery,我知道这是一个很难回答的问题,但在圣诞节过后,我似乎很难让自己的大脑恢复正常 简单的问题,我正在使用jQuery.error事件来替换使用这段脚本破坏的图像 $('#slideshowContainer img[name=imgStockItem]').error(function(){ $(this).attr('src', '/assets/images/no-image-large.png'); }); 我真正想做的是做一些类似于if/else的交易,如
$('#slideshowContainer img[name=imgStockItem]').error(function(){
$(this).attr('src', '/assets/images/no-image-large.png');
});
我真正想做的是做一些类似于if/else的交易,如果图像被破坏,那么做这个,否则,做这个
我试过这个:
if($('#slideshowContainer img[name=imgStockItem]').error()){
alert("true");
} else {
alert("false");
}
但这只是返回一个真实的每一次,破碎的图像或没有
有什么想法吗?我想在这里做个假设,但我想这可能是你的问题 必须在浏览器触发错误事件之前附加事件处理程序,这就是示例在附加处理程序后设置src属性的原因 看 当
src
被设置为一旦浏览器呈现它将向定义的源发出请求的元素时,您必须附加事件,您的问题是它抛出了错误,而您还没有捕获到它,因为处理程序当时没有应用
您可以尝试以下方法(在所有图像标记之前放置):
.error()
事件表示。。错误
要知道映像是否已成功加载,请处理.load
事件
现在是棘手的部分。。要让jQuery(或JavaScript)触发任何这些事件,您必须手动分配imagesrc
,否则将“太晚”
所以,有这样的图像标签:
<img name="imgStockItem" my_src="image_source_here.png" />
那么这样的代码:
$(document).ready(function() {
$('#slideshowContainer img[name=imgStockItem]').each(function(index) {
$(this).error(function() {
$(this).attr('src', '/assets/images/no-image-large.png');
$("#StatusDiv").append("image #" + (index + 1) + " is broken<br />");
});
$(this).load(function() {
$("#StatusDiv").append("image #" + (index + 1) + " loaded successfully<br />");
});
$(this).prop("src", $(this).attr("my_src"));
});
});
$(文档).ready(函数(){
$(“#slideshowContainer img[name=imgStockItem]”)。每个(函数(索引){
$(this).error(函数(){
$(this.attr('src','/assets/images/no-image-large.png');
$(“#StatusDiv”).append(“image#“+(index+1)+”已断开
);
});
$(this.load(function()){
$(“#StatusDiv”).append(“图像#“+(索引+1)+”加载成功
);
});
$(this.prop(“src”),$(this.attr(“my_src”);
});
});
StatusDiv
只是显示每个图像状态的容器的示例
.谢谢你,伙计。这正是我想要的。没错,只是摆弄它,两个事件都不会触发。将要删除此项,因为已经有更好的答案。@user1001421 OK找到了它不起作用的原因并更改了所有内容,请查看我的编辑。看起来正是作业。奇怪的是,本来应该如此简单的事情却变得相当困难。非常感谢,老兄。@user1001421干杯只是要找出“太晚”的部分/@用户1001421没问题,我不确定你选择的答案是否适合你-至少不是因为错误。事实上,我想我说得太早了。我认为选择的答案终究是行不通的。但至少我知道哪里出了问题。@user1001421我的解决方案证明有用吗?不幸的是没有。我不确定问题是否是因为#slideshowContainer img[name=imgStockItem]最多可以容纳9张图像,我真的应该只测试第一张图像。IE:$('#slideshowContainer img[name=imgStockItem]:first')。错误(我想我可能是从错误的角度来处理这个问题。我想做的就是检查图像是否损坏,在这种情况下,用另一个图像替换它。如果没有损坏,那么做其他事情,启动幻灯片放映等。我可以在实际加载图像之前尝试预加载图像吗。只是为了测试图像是否存在?
$(document).ready(function() {
$('#slideshowContainer img[name=imgStockItem]').each(function(index) {
$(this).error(function() {
$(this).attr('src', '/assets/images/no-image-large.png');
$("#StatusDiv").append("image #" + (index + 1) + " is broken<br />");
});
$(this).load(function() {
$("#StatusDiv").append("image #" + (index + 1) + " loaded successfully<br />");
});
$(this).prop("src", $(this).attr("my_src"));
});
});