同时使用" d3.event.preventDefault"和" d3.event.which"

时间:2015-05-11 14:53:11

标签: javascript d3.js

此代码非常完美 - 除了 Internet Explorer 11 deleteNode(d)仅在mousedown句柄被注释掉时才会调用。

circle.enter().append('circle')
  .on('contextmenu', function (d) {
    deleteNode(d);
  })
  .on('mousedown', function (d) {
    setNode(d);
  });

这就是为什么我尝试用mousedown抓住右键,但仍会显示上下文菜单。

circle.enter().append('circle')
  .on('mousedown', function (d) {
    d3.event.preventDefault();
    if (d3.event.which == 3) {
      deleteNode(d);
    }
    setNode(d);
  });

如何修复不显示上下文菜单或同时捕获contextmenumousedown个事件?

1 个答案:

答案 0 :(得分:4)

您已接近自己的问题解决方案。所有需要的东西已经存在,你只需要重新安排一下:

7:30PM

这适用于IE11以及FF和Chrome。

顺便说一句,请注意circle.enter().append("circle") .on("contextmenu", function(d) { d3.event.preventDefault(); }) .on("mousedown", function (d) { if (d3.event.which == 3) { deleteNode(d); // <-- d probably needs to be replaced } else { setNode(d); // <-- d probably needs to be replaced } }); 是指绑定到节点的数据,而不是节点本身。在事件内,侦听器d将引用当前节点。

this
var svg = d3.select("svg");                
svg.append("circle")
    .attr({
        "cx": 100,
        "cy": 100,
        "r": 100
    })
    .on("contextmenu", function(e) {
        d3.event.preventDefault();
    })
    .on("mousedown", function (e) {
        if (d3.event.which == 3) {
          //console.log("deleteNode(d)");
        } else {
          //console.log("setNode(d)");
        }
    });