javascript - chrome 中未委托(delegate) click 事件

标签 javascript dom-events event-delegation

在我的应用程序中,我创建了一些新元素并根据用户的操作将它们附加到页面,

var dv=document.createElement('div');
//set styles for the dv
.....

创建此 div 元素后,我将向其添加一些事件:

MyLib.Event.addDomListener(dv,'click',function(e){
    console.info('click');
});
MyLib.Event.addDomListener(dv,'mousedown',function(e){
    console.info('mousedown');
});

这是页面中生成的结果(一个div包含一个img标签和一个span标签):

enter image description here

页面加载后,出现问题。

如果直接点击图片,click事件不会触发,但mousedown事件会触发。

如果我直接单击没有图像的 div,一切都会顺利。

似乎,当我单击图像时,click 事件没有委托(delegate)给 div。

但是我通过Chrome开发工具复制了最终生成的代码,它是这样的:

<div id="con" style="position: absolute; border:1px solid red; left: 10px; top: 10px; width: 20px; height: 34px; ">
        <img src="http://localhost/MAPALINE/IMAGES/MARKER_LARGE.PNG" id="ov" style="left: 0px; top: 0px; position: relative; width: 20px; height: 34px; ">
        <span style="text-align: center; left: 0px; top: 0px; width: 20px; position: absolute; ">1</span>
</div>

然后我将其复制到新的 .html 文件,并添加事件脚本:

<script type="text/javascript">
    var con=document.getElementById('con');
    con.addEventListener('click',function(e){
        console.info('click');
    },false);
    con.addEventListener('mousedown',function(e){
        console.info('mousedown');
    },false);
</script>

现在,无论我在 div 内单击什么位置,这两个事件都会发生。

我真的疯了,到底出了什么问题?我没有为生成的 div 做任何特别的事情。

所以我想知道大家是否遇到过这个问题?或者什么情况下会发生这种异常?

<小时/>

更新:

Mylib.Event.addDomListener=function(target,evt,handler){
    if(target.addListener){
        target.addListener(evt,handler,false);
    }else if(target.atttchEvent){
        target.attachEvent('on'+evt,handler);
    }else
        #~ target['on'+evt]=handler;
}

它仅适用于跨浏览器使用,请注意 mousedown 事件无论如何都运行良好。

最佳答案

我注意到您使用了两种不同的方法在两个示例之间附加监听器。

通过尽可能紧密地重复事物来隔离可能的原因始终是最佳实践。尝试坚持使用相同的方法为两个测试附加监听器,这可能会让您获得一些见解。

另外,我不知道“MyLib”是什么,但如果它是某种 JS 库,则问题可能出在该库中。尝试使用原生 JS 方法或不同的库。

关于javascript - chrome 中未委托(delegate) click 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9323944/

相关文章:

javascript - 通量结构内的微型通量系统

javascript - 如何在自定义平铺谷歌地图中获取纬度/经度?

javascript - 通过拖动将图像添加到动态表

javascript - 我可以(在javascript中)编写一个自动应用于一种html标签的事件或函数吗?

javascript - 如何停止在子元素上触发事件而不是添加指针事件?

显示动态数据的 Javascript 框架建议

javascript - 运行 setInterval 一次然后停止

javascript - 如何在ReactJS中检查事件目标的类名?

javascript - removeEventListener - 函数定义本身内的回调?

javascript - jQuery 事件委托(delegate)监听器未触发