JavaScript:在已加载的元素上添加addEventListener('load',func)

时间:2015-08-11 20:32:27

标签: javascript javascript-events

我需要检查是否加载了OBJECT标记,在某些边缘情况下,在运行JavaScript之前加载了OBJECT,然后我的函数将永远不会触发。

<object type="image/svg+xml" data="svg/europas-ledande-online-butik.svg">Europas ledande online butik</object>
obj.addEventListener('load', function svgLoad() {..

如何检查我的OBJECT是否已加载? 我可以做:object onload =“存储一些全局变量”,然后检查它。 但那是笨重而丑陋的。

我无法检查宽度或高度,因为我不知道这些值(它是通过CMS添加的)

想法?

上面的例子恰好是一个SVG,但它可以是任何带有额外外部数据请求的元素 - 对象,图像,嵌入了什么。

如上所述:ONLOAD不是我想要做的事情(关注点的分离 - 内联事件处理程序对你不利)并且addEventListener不适用于已经加载的元素。

当然,我希望尽快触发我的svgLoad函数 - 只要对象准备好显示。

谢谢!

/ J

1 个答案:

答案 0 :(得分:0)

这就是我最终做的事情:

<object class="slide visuallyhidden" onload="this.setAttribute('data-is-loaded', 'true')" type="image/svg+xml" data="svg/europas-ledande-online-butik.svg">Europas ledande online butik</object>

onload="this.setAttribute('data-is-loaded', 'true')"

是的,它是一个内联事件处理程序 - 但在这种情况下,它不会在它自己的元素之外做任何事情。这不是理想的,但必须这样做。

我可以设置课程,但我选择不这样做。 这种方式更具语义性,setAttribute具有出色的浏览器支持(一直回到DOM Core 1至少包含IE5)并且非常高效。

现在唯一的问题是使用OBJECT元素嵌入的SVG的onload似乎不包括链接背景。这意味着可以在下载任何链接的背景之前触发onload。