jQuery:捕获图像加载事件错误404,可以这样做吗?

时间:2010-12-05 23:28:47

标签: jquery youtube thumbnails

我基本上是通过一堆youtube视频网址来获取每个视频的id代码。

然后我重复列表中的所有“缩略图”图像,并用youtube视频缩略图网址替换源代码。

我目前遇到的问题是,如果视频已从youtube中删除,则生成的图像源将不会返回正常运行的图像网址,但是替换仍然会触发,因此会将损坏的图像网址放入列表中。 / p>

如何在使用缩略图源替换初始图像源之前,让jQuery检测网址是否确实有效?

这是我的代码循环遍历页面上的youtube剪辑并过滤其ID:

function generateYoutubeThumbnails() {
    var YTT = {};
    YTT.videos = $('.video-thumbnail'); // the placeholder thumbnail image

    YTT.videos.each(function(i) {
        YTT.url = $(this).attr('data-videourl'); // the youtube full url, eg: http://www.youtube.com/watch?v=F52dx9Z0L5k
        YTT.videoId = YTT.url.replace(/(.+?)watch\?v=/gi,'').replace(/\&(.+)$/gi,''); // find and replace to get just the id: eg: F52dx9Z0L5k

        YTT.snip = 'http://img.youtube.com/vi/'+ YTT.videoId +'/hqdefault.jpg'; // the thumbnail url which would return: http://img.youtube.com/vi/F52dx9Z0L5k/hqdefault.jpg in this case.

        $(this).attr('src', YTT.snip); // replace the placeholder thumbnail with the proper youtube thumbnail that we got above
    });
}
generateYoutubeThumbnails();

如果生成的网址无效,我是如何停止查找和替换最后一步的任何想法?

1 个答案:

答案 0 :(得分:16)

的jQuery

$('img').bind('error', function() {
   alert('image did not load');
});

jsFiddle

没有jQuery

Array.forEach(document.getElementsByTagName('img'), function(img) {
    img.addEventListener('error', function() {
        this.style.border = '5px solid red';
    }, false);
});

jsFiddle

没有jQuery的 示例使用了旧IE中不可用的一些方法。您可以 shim 这些方法或使用更兼容的技术。