如何防止图像地图区域点击从传播到链接?

时间:2011-10-06 23:49:04

标签: javascript imagemap

我有一个HTML图片地图,其中包含一些带链接的区域。我还有一些Javascript功能,在某些情况下,它会覆盖某些特定区域的图像映射的默认功能。

我已经通过此函数将我的函数附加到我想要的区域(其中el是元素,eventName是事件的名称,eventHandler是实际函数) :

function bindEvent(el, eventName, eventHandler) 
{
  if (el.addEventListener)
  {
    el.addEventListener(eventName, eventHandler, false); 
  } 
  else if (el.attachEvent)
  {
    el.attachEvent('on'+eventName, eventHandler);
  }
}

所以通过我的自定义处理程序,我正在做这样的事情:

    function onAreaClick(e)
    {
             //my custom code here

        e.cancelBubble = true;
        if(e.stopPropagation) 
               e.stopPropagation();

        return false;
    }

    //...
    //assume looping through all areas of the imagemap here, with each element referred to by the variable area
    bindEvent(area, 'click', onAreaClick);

onAreaClick函数实际上触发了OK,但我不能让事件停止传播。我尝试了cancelBubblestopPropagationreturn false,但仍然遵循了链接。我还尝试在addEventListener()的{​​{1}}函数调用中将 bubbling 的阶段更改为捕获

如何阻止此事件触发图像映射的默认操作?

2 个答案:

答案 0 :(得分:1)

好的,所以经过一些更多的实验后,我似乎让它在没有JS错误的所有浏览器上运行(或者看起来似乎如此)。

我创建了一个停止默认处理程序的函数,我用事件作为参数调用它。此功能如下所示:

function stopDefaultHandler(e) 
{ 
    if (e)
    {
      e.cancelBubble = true;
      e.returnValue = false;

      if (e.stopPropagation)
        e.stopPropagation;

      if (e.preventDefault) 
       e.preventDefault();
    }

    if (window.event && window.event.returnValue)
       window.eventReturnValue = false;
}

它似乎工作正常,但评论赞赏。

答案 1 :(得分:0)

你试过吗

e.preventDefault()