【问题标题】:How to get a reference to the IMG element from MAP's eventhandler function?如何从 MAP 事件处理函数中获取对 IMG 元素的引用?
【发布时间】:2012-11-16 17:29:30
【问题描述】:

假设我们有一个 IMG (idless) 元素,该元素具有 usemap="#hotmap" 属性。然后我们有这个<MAP name="hotmap"> 元素(在BODY 中)包含大量AREAs(比如>1000)。很明显,我们希望将AREAs 的事件处理委托给MAP 元素,而不是创建数百个事件监听器。

现在在事件处理函数(MAP)中,我们希望获得对使用触发事件的MAPIMG 的引用。但是,MAPBODY 中,而IMG 元素不能有HTML,因此MAP 不能在其子元素中。那么问题来了,我们如何才能在这个事件处理程序中捕捉到IMG

一个简单的例子:

<img src="some_image.png" usemap="#hotmap" />
                ...
<map id="map" name="hotmap">
    <area shape="circle" coords="100,100,50" />
                ...
</map>

map.addEventListener('click', function (e) {
    var area = e.target,
        image = ?; // How to refer the img
        ...
}, false);

旁注

我正在开发一个 HTA 项目,我需要一个对象,该对象可以为具有某些自定义属性的图像动态创建和分配热图。该对象从外部文件中获取AREAs 的数据,除了这个小细节之外,一切正常。现在,我正在向每个AREA 添加一个包含对“用户”IMG 的引用的自定义属性。虽然这是不必要的,但如果它只能在事件处理程序中执行一次。

编辑

jsFiddle 的现场演示(不包括 HTA,适用于任何(?)现代浏览器)


编辑二

我刚刚意识到,我不能重用MAP,因为它也可以根据IMG 调整大小。所以我把对IMG 的引用放到MAP 而不是它的AREAs。

虽然这解决了我的问题,但我仍然想知道,一般来说,如何在事件处理程序中获取IMG。建议的querySelector() 解决方案似乎不起作用(之前使用它,现在它返回undefined

【问题讨论】:

  • 能否请您发布包含图像和起始地图标签的完整标记。
  • @Dr.Molle 太大了,不能在这里发帖,但我现在正在研究 jsFiddle。这需要一些时间,因为我必须将结果从 HTA 文件操作转换为数组以使其在常规 HTML 页面中工作。
  • 编辑后我不再需要它了,抱歉。当您使用包含多张图片的地图时,标记不相关。
  • 我对类似问题的解决方案:link

标签: javascript html imagemap


【解决方案1】:

起初:
请注意您在此处使用的方法,HTA 默认使用 IE7(标准模式内容)或 IE5(怪癖模式内容)运行,因此您不能依赖 IE 中可用的功能。 我建议只使用 IE5 中可用的方法,例如使用attachEvent 而不是addEventListener

this article 之后,您应该能够定义兼容性,但对我来说它不起作用。

与问题相关:

不是观察地图的点击事件,而是观察对img的点击。
当您观察地图上的点击,并且该地图被多个图像使用时,无法找到地图与图像之间的关系。

【讨论】:

  • 首先:不用担心,这是一个独立的桌面应用程序,需要安装IE9。当 IE9 可用时,一切都经过测试并且可以正常工作。与问题相关:我试过这个,但我无法获得实际点击的AREA。这很奇怪,因为如果有例如DIVs 要点击,它们可以在事件处理程序中被跟踪。无论如何,谢谢你的回复。如果没有人能证明这个“否定”答案不正确,我会在几天内接受它。
  • 当IE9可用且一切正常时,为什么您的HTA在使用querySelectorAll时会抛出错误?我还安装了 IE9,并且在 HTA 中没有提供 querySelectorAll 和 addEventListener。
  • 嗯...很难说没有看到代码,但一个文明的问题是,你在&lt;meta http-equiv="x-ua-compatible" content="ie=9"/&gt;标签之前有&lt;style&gt;标签或&lt;link rel="styleSheet"...&gt;。请注意,在 MSDN 中该页面的示例中存在错误,&lt;!DOCTYPE html&gt; 也是必需的,尽管它未包含在示例代码中。
  • 我正准备在我的评论中添加&lt;script&gt;s,但为时已晚。无论如何,任何可能影响文档兼容模式的代码都应该放在x-ua compatible 之后。我找到的最安全的形式是:&lt;!DOCTYPE html&gt;&lt;html&gt;&lt;title&gt;title&lt;/title&gt;&lt;meta http-equiv="x-ua-compatible" content="ie=9"/&gt;。在此之后,您可以包含任何您想要的内容。
  • 实际上,当您建议观察图片点击时,您是对的。我唯一要做的就是将地图附加到图像本身,而不是body
猜你喜欢
  • 2013-05-06
  • 2020-03-05
  • 2020-07-28
  • 2020-12-11
  • 2018-09-02
  • 2016-12-18
  • 2021-07-27
  • 1970-01-01
  • 2012-05-26
相关资源
最近更新 更多