如何防止mouseup后触发mouseleave?

时间:2013-09-03 13:53:33

标签: javascript javascript-events event-handling d3.js event-bubbling

在我的javascript应用程序中,我遇到了事件冒泡的问题,即我不希望在鼠标上移动元素之后触发mouseleave(已经实现了拖动行为,因此它移动并且鼠标离开它)。

我该怎么做?

修改

我正在使用d3.js以下列方式捕获事件:

d3.selectAll("circle")
        .on("mouseover", function(d,i){
        ...
        }
        .on("mouseup", function(d,i){
        ...
        }
        .on("mouseleave", function(d,i){
        ...
        }

2 个答案:

答案 0 :(得分:1)

如何拥有布尔check 变量

var preventBubble = true;
d3.selectAll("circle")
        .on("mouseover", function(d,i){
        ...
        }
        .on("mouseup", function(d,i){
        preventBubble = false;
        ....
        }
        .on("mouseleave", function(d,i){

        if(preventBubble) {         
        ...
          }
        }

我宁愿使用 mouseover进行回调

,而不是使用mouseleave.hover()
d3.selectAll("circle").on("hover", function(d,i){
    //To Dos
  }, function(d,i) {
    // callback To Dos
});

答案 1 :(得分:0)

我已经用类似于user1671639的布局检查的方式解决了它:

var been_in_mouseup = false;

.on("mousedown", function(d){
    ...
    been_in_mouseup = false;
})
.on("mouseup", function(d,i){
    ...
    been_in_mouseup = true;
})
.on("mouseleave", function(d, i){
    ...
    if(false == been_in_mouseup )
    {
    ...
    }
})

修改

还有更优雅的方法吗?