【问题标题】:Internet Explorer 10 not reading jQuery functionInternet Explorer 10 不读取 jQuery 函数
【发布时间】:2014-01-08 04:41:42
【问题描述】:

我有一个 jQuery 加载函数,可以使用 alt 标记数据创建和添加后图像。它适用于所有浏览器和 IE9,只是不适用于 IE10,我不知道为什么。

这是 jQuery 代码:

$("img.caption").load(function () {
    var imageCaption = $(this).attr("alt"); 
    if (imageCaption != '') {
        var imgWidth = $(this).width();
        $("<figcaption class='img-caption'><em>" + imageCaption + "</em></figcaption>").css({ "position": "relative", "bottom": 0, "left": 0, "width": imgWidth + "px" }).insertAfter(this);
    }
    var figcaptionHeight = $('.img-caption').outerHeight();
    $('.img-caption').css('margin-top', -(figcaptionHeight + 2));
});

我什至尝试过使用其他标签,但根本没有任何响应。

这是 HTML 标记:

<figure>
     <img class="caption" alt="caption text" /> 
</figure>

【问题讨论】:

  • 你检查错误控制台了吗?
  • 它说“选择器找到零个元素”,这让我感到困惑,因为其他所有浏览器都没有问题,而且它不像是一个复杂的选择器。
  • 图片标签的.src 属性在哪里?它不会生成带有要实际加载的图像 URL 的 load 事件。

标签: jquery html internet-explorer-10


【解决方案1】:

如果您尝试为页面 HTML 中指定的图像挂钩加载事件,则无法使用 javascript 可靠地做到这一点。这是因为某些图像(尤其是已经在浏览器缓存中的图像)可能会在您的 JS 运行之前以及在您安装事件处理程序之前加载,因此您永远不会收到加载事件的通知。

这在某些版本的 IE 中尤为突出。

如果您没有为图像标签指定.src 属性,您也不会收到.load() 事件,因为load 事件的全部目的是在图像URL 完成加载时通知您.

假设您指定的是.src URL,有几种可能的解决方案:

  1. onload 处理程序放入 HTML 中,因为它们将从一开始就到位。
  2. 当你的 JS 运行时,检查你所有的图片,看看是否有一些已经完成加载。您可以立即处理这些,然后在尚未完成加载的那些上安装 .load() 处理程序。

这是选项 #2 的示例,您可以在其中检查图像是否已加载,如果是,则立即处理它,否则等待 load 事件:

$("img.caption").each(function() {

    function processImage() {
        var imageCaption = $(this).attr("alt"); 
        if (imageCaption != '') {
            var imgWidth = $(this).width();
            $("<figcaption class='img-caption'><em>" + imageCaption + "</em></figcaption>").css({ "position": "relative", "bottom": 0, "left": 0, "width": imgWidth + "px" }).insertAfter(this);
        }
        var figcaptionHeight = $('.img-caption').outerHeight();
        $('.img-caption').css('margin-top', -(figcaptionHeight + 2));        
    }

    // if image already loaded, process it now
    if (this.complete) {
        processImage.call(this);
    } else {
        // wait for it to be loaded
        $(this).load(processImage);
    }
});

【讨论】:

    【解决方案2】:

    IE 可能不喜欢 $("img.caption") 而是尝试 $(".caption")

    【讨论】:

    • 为什么 ---- 不会这样?
    • 因为它的 Internet Explorer。
    • -1 虽然我同意 IE 可能会不稳定,但 jQuery 看起来会规范这种不稳定。 img.caption 是一个完全有效的选择器。 jQuery 选择器背后的 Sizzle 引擎在主要浏览器(包括 IE 10)中的工作方式相同。这很可能是由于图像的缓存问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多