Javascript点击和mousedown冲突

时间:2013-01-31 04:26:22

标签: jquery javascript-events event-handling mouseevent

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

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

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

4 个答案:

答案 0 :(得分:16)

试试这种方式。因为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

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

答案 1 :(得分:4)

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

例如:

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

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

答案 2 :(得分:1)

您可以使用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/

答案 3 :(得分:0)

            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 */
            });