我有一个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,但我不能让事件停止传播。我尝试了cancelBubble
,stopPropagation
和return false
,但仍然遵循了链接。我还尝试在addEventListener()
的{{1}}函数调用中将 bubbling 的阶段更改为捕获。
如何阻止此事件触发图像映射的默认操作?
答案 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()