Javascript点击和mousedown冲突

我有一个特定的场景,我使用click来插入一个div,然后在该div上进行mousedown拖动它。 我将click绑定到父容器,并将div本身绑定到div上。 但是,当我在div上进行moused时,它也会触发父对象的点击,因此插入多个div而不是拖动已经添加的div!

有没有办法解决这个问题? 我无法取消绑定click ,因为我需要使用click添加2个div,然后在这些上绑定mousedown

更新:我正在使用selector.on(event, handler)类型的绑定。

试试这种方式。 因为event.stopPropagation不会停止鼠标按下事件事件。 鼠标按下和单击事件彼此无关。

  var mousedDownFired = false; $("#id").mousedown(function(event){ mousedDownFired =true; //code }); $("#id").click(function(event){ if(mousedDownFired) { mousedDownFired = false; return; } //code }); 

更新:

。 像这样触发鼠标事件

1)MouseDown

2)点击

3)MouseUp

如果触发鼠标按下,则在触发鼠标按下事件后将启用标记。在此单击事件将禁用标志变量。 这将作为循环方式工作。 不要考虑两个鼠标按下或两次点击

您可能想要做的是将事件处理程序附加到父容器而不是单个子div。 通过这样做,在创建新子项时,您不需要添加其他事件处理程序。

例如:

 $("#parentDiv").on('click','.childDiv',function() { event.stopPropagation(); }).on('mousedown','.childDiv',function() { // your dragging code }); 

当您为.on()函数提供选择器时,将为与该选择器匹配的后代调用传递的函数。

您可以使用event.stopPropagation()。

示例:

 $("#button").mousedown(function(event){ event.stopPropagation(); // your code here }); $("#button").click(function(event){ event.stopPropagation(); // your code here }); 

看看这个页面http://api.jquery.com/event.stopPropagation/

  var timestamp = 0; jQuery('ul.mwDraggableSelect a',element).mousedown(function(event){ timestamp = new Date().getTime(); }); jQuery('ul.mwDraggableSelect a',element).click(function(event){ var interval = 400;//if a mousedown/mouseup is longer then interval, dont process click var timestamp2 = new Date().getTime(); if((timestamp2 - timestamp)>interval){ return false; } /* your code here */ });