我有一个 DOM 结构,如下所示 -
<div id='MyDiv'>
<span>Hello MyDiv</span>
<p class='MyClass'>
<img src='image.png' alt='myImage' width='300px' height='300px' />
<a href='#goToNextDiv'>Go to next</a>
</p>
</div>
现在MyDiv
有一个带有原型库的 click 事件处理程序,我无法访问其源代码。我想从 div 中删除这个处理程序并插入另一个。我为此尝试了以下代码-
var content = document.getElementById('MyDiv');
content.addEventListener('click', function(event){
event.preventDefault();
event.stopPropagation();
alert('This is my handler');
return false;
}, true);
问题是,这段代码还阻止click
了锚标记的事件。单击 div 会导致我的事件处理程序执行,这是所需的,但它也会停止锚标记以执行它的正常行为(即跳转到 div goToNextDiv
)。
现在我尝试注释掉该event.stopPropagation()
行,这再次启用事件传播并允许锚点相应地运行,但随后它也执行MyDiv
.
如何从 div 中删除以前的处理程序并附加我的新处理程序,以便 -
- 没有调用 div 的前一个事件处理程序
- 我的 div 事件处理程序执行
- 锚标签也有效(在任何地方,div 内可能有很多锚标签)