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