Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript chrome中未委派单击事件_Javascript_Dom Events_Event Delegation - Fatal编程技术网

Javascript chrome中未委派单击事件

Javascript chrome中未委派单击事件,javascript,dom-events,event-delegation,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,'mousedow

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

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标记):

加载页面后,情况会出错

如果我直接单击图像,
click
事件不会触发,但是
mousedown
事件会触发

如果我在没有图像的情况下直接单击div,一切都会顺利进行

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

但是我通过Chrome develop tool复制最终生成的代码,它是这样的:

<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>

它只供跨浏览器使用,请注意,
mousedown
事件无论如何都可以正常工作。

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

最好的做法是通过尽可能紧密地复制事物来隔离可能的原因。尝试使用相同的方法为两个测试附加侦听器,这可能会让您有所了解


另外,我不知道“MyLib”是什么,但如果它是某种JS库,那么问题可能就在该库中。尝试使用本机JS方法或其他库。

MyLib.Event.addDomListener()有什么作用(请显示代码)?您应该验证事件是否确实已附加。这将帮助您确定问题是附加事件还是事件传播。我建议在“元素”面板中尝试Chrome的“事件侦听器”选项卡。(),或者可能在Firefox中使用Firebug()的Eventbug扩展,它连接在chrome中。但它仍然不起作用。但是,如果我添加这个
MyLib.addDomListener(dv,'mousedown',函数(e){e.cancelBubble=true;e.stopPropagation&&e.stopPropagation();})。点击事件会起作用。我想知道为什么鼠标按下会阻止点击?有时候最好找到解决办法,跳过谜团,继续前进。
<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>
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;
}