【发布时间】:2015-07-23 18:30:16
【问题描述】:
我有以下功能:
function toggleContent()
{
var parent = this.parentElement;
toggleClass(parent,"detailsAreVisible");
}
当用户单击某个按钮时,将调用此函数。绑定发生在普通的 javascript 中,如下所示:
var allTogglingButtons = document.querySelectorAll("[unhideicon],[hideicon]");
crossBrowserAddClickEvent(allTogglingButtons, toggleContent);
crossBrowserAddClickEvent 函数是修复另一个 IE 问题所必需的:
function crossBrowserAddClickEvent(array, functionName)
{
for(var i=0; i < array.length; i++)
{
if (array[i].addEventListener)
{
aray[i].addEventListener('click', functionName);
}
else if (array[i].attachEvent)
{
array[i].attachEvent('onclick', functionName);
}
}
}
这在 chrome 和 firefox 中运行良好,因为“this”变量设置为我在 toggleContent 函数内单击的按钮。但是,在 IE 中,“this”等于(默认)全局窗口/文档对象,当然在其上调用 .parentElement 会产生 null。为什么“this”不是点击按钮?
作为参考,我点击的“按钮”实际上是一个 svg 元素:
<svg unhideicon class="svgIcon"> .... </svg>
【问题讨论】:
-
为什么需要
.attachEvent? IE8 doesn't support svg at all 这是最后一个不支持.addEventListener的版本 -
好吧,我们很快就会用 img 替换 svg,但首先要做的事情是:)
-
我还是很好奇... 正如已经写过的,SVG 从版本 9 开始仅受 IE 支持。那为什么需要使用
.attachEvent? IE9+支持.addEventListener
标签: javascript html internet-explorer svg