Javascript 错误事件

Javascript 错误事件,javascript,jquery,Javascript,Jquery,我知道这是一个很难回答的问题,但在圣诞节过后,我似乎很难让自己的大脑恢复正常 简单的问题,我正在使用jQuery.error事件来替换使用这段脚本破坏的图像 $('#slideshowContainer img[name=imgStockItem]').error(function(){ $(this).attr('src', '/assets/images/no-image-large.png'); }); 我真正想做的是做一些类似于if/else的交易,如

我知道这是一个很难回答的问题,但在圣诞节过后,我似乎很难让自己的大脑恢复正常

简单的问题,我正在使用jQuery.error事件来替换使用这段脚本破坏的图像

    $('#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)触发任何这些事件,您必须手动分配image
src
,否则将“太晚”

所以,有这样的图像标签:

<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"));
    });
});