我有一个特定情况,即我使用click
插入div,然后在该div上插入mousedown
来拖动它。我已将click
绑定到父容器,并将mousedown
绑定到div本身。但是当我在div上mousedown
时,它也会触发父对象的点击,因此插入多个div而不是拖动已添加的div!
有没有办法解决这个问题?我无法解除绑定click
,因为我需要使用click
添加2个div,然后将mousedown
绑定在这些div上。
更新:我使用selector.on(event, handler)
类型的绑定。
答案 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
});
答案 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 */
});