1

我目前正在一个 Hypertree 图上工作(这里有一个 repo ),我想从JavaScript InfoVis Toolkit中使用它。问题如下:我在Hypertree中添加了特定的事件,即onClickonRightClick

 Events: {
          enable: true,
          onClick: function(node, eventInfo, e) {
              ht.controller.onComplete();
          },
          onRightClick: function(node, eventInfo, e) {
              ht.controller.onComplete();
          },
      },

然后我简单地将 veent 处理程序附加到 Hypertree 标签上,只需稍微修改演示代码:

//Attach event handlers and add text to the
  //labels. This method is only triggered on label
  //creation
  onCreateLabel: function(domElement, node){
      domElement.innerHTML = node.name;

      $jit.util.addEvent(domElement, 'click', function () {
          ht.onRightClick(node.id, {
              onComplete: function() {
                  ht.controller.onComplete();
              }
          });
      });


      $jit.util.addEvent(domElement, 'rclick', function () {
          ht.onClick(node.id, {
              onComplete: function() {
                  ht.controller.onComplete();
              }
          });
      });
  },

这很简单。Hypertree 事件的文档位于Options.Events.js中。现在我加载页面......我有left.clicks。但是没有右键单击...我希望 RightClicks 移动图形,并希望 onClicks 从 DOM Element 节点打开一个链接。有人可以在这里给我指点吗?

最好的,马吕斯

4

3 回答 3

1

$jit.util.addEvent(obj, type, fn) 是 obj.addEventListener(type, fn, false) 的快捷方式。所以你试图绑定到'onrclick'事件。但是javascript中没有这样的事件。为了检测右键单击,您只需将“rclick”替换为“mouseup”,并在回调中检查按钮是否正确。这是代码:

$jit.util.addEvent(domElement, 'mouseup', function (event) {
   // detecting right button
   if (event.button != 2) {
       return;
   }
   ht.onClick(node.id, {
       onComplete: function() {
           ht.controller.onComplete();
       }
   });
});

此外,您不需要为此目的使用 Options.Events.js,因此您可以删除该代码

于 2013-10-27T11:09:29.277 回答
1

我在“事件”部分看到的唯一错误是 onRightClick 后面的逗号。如果您使用 IE>8,它确实不应该影响代码,但值得一试。

于 2013-10-24T09:41:19.933 回答
1

好的,这就是为什么我认为您的解决方案不起作用的答案。

$jit.util.addEvent(domElement, 'rclick', function ()

没有像 'rclick' 这样的 jquery 事件。

通常使用 jquery,您将使用以下命令检测右键单击

$('#element').mousedown(function(event) {
 if (event.which === 3) { 
  alert('Right mouse button pressed');
 }
});

因此,在您的示例中,您将使用“mousedown”而不是“rclick”。但是,查看addEvent的文档:

$jit.util.addEvent(elem, 'click', function(){ alert('hello'); });

该示例似乎表明事件对象无法传递给 addEvent 的函数参数,这意味着无法检测到鼠标右键已被单击。

可能值得将您的问题直接发布给 InfoVis 的作者,因为我也很想看看是否可以连接鼠标右键。

于 2013-10-26T21:37:31.833 回答