1

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

我怎样才能做到这一点 ?

编辑

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

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

2 回答 2

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) {         
        ...
          }
        }

而不是使用mouseoverand mouseleave,我宁愿使用.hover()with 回调

d3.selectAll("circle").on("hover", function(d,i){
    //To Dos
  }, function(d,i) {
    // callback To Dos
});
于 2013-09-03T14:07:25.997 回答
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 )
    {
    ...
    }
})

编辑

有没有更优雅的方法来做到这一点?

于 2013-09-03T14:24:03.587 回答