d3.js事件已注册但未触发。

问题描述 投票:0回答:1

有一个漂亮的图,我想复制(然后修改)发现的。此处. 我的项目使用Backbone和Coffeescript编写的D3.js。每个backbone.view都有自己的d3 plot类型。在大多数情况下,这一直很好,直到现在。为了简明扼要,我不会从链接中复制所有的代码,我已经尽最大努力几乎完全复制了它(主要的区别是使用的数据)。那么问题是这样的... 图形完全渲染,事件似乎被 "注册",但它们没有触发。我试图使用D3事件而不是backbone+jQuery事件。因此,围绕事件的实际代码看起来像这样。

(一切都在咖啡中)

@node = @node
    .data( nodes.filter((d)-> !d.children ))
    .enter().append("text")
      .attr("class", "node")
      .attr("dy", ".31em")
      .attr("transform", (d)-> "rotate(#{d.x-90})translate(#{d.y+8},0)#{if d.x<180 then "" else "rotate(180)"}")
      .style("text-anchor", (d) -> if d.x < 180 then "start" else "end")
      .text((d) -> d.key)
      .on("mouseover", -> alert("hi"))
      .on("mouseout", -> alert("hi"))

这看起来应该和例子中的一模一样...... 文本节点 (text.node)对象是我希望事件发生的地方。在这个例子中,我不在乎它们是做什么的,只要它们能触发。我已经用开发工具以两种方式检查了节点。两种方式都表明一个监听器已经被添加到对象中。

1 => (使用控制台)

> d3.selectAll("text.node")  

揭示一个文本节点的列表,所有节点都有属性。__onmouseout: function....__onmouseover function....

2 => 我还通过选择 dom 元素来检查它(同样在开发工具中的 Elements 选项卡),并在右栏选择 Event Listeners. 这也表明 mouseovermouseout.

发出 是,什么都没有发生。完全没有。 我不认为这是Backbone + Jquery + D3.js组合的问题,因为在简单的柱状图中添加了 .on("mouseover", ...) 到矩形的完美工作。

如果有我遗漏的相关信息,请告诉我。这是一个相当有压力的问题,我不完全确定这个问题应该包括什么。

javascript d3.js events backbone.js dom-events
1个回答
0
投票

好吧,在继续和继续寻找解决方案后,我终于从头开始删除所有样式和其他一切在页面上渲染的东西。 它的工作。所以代码不是垃圾。是有别的东西在干扰。我一一把其他视图加回页面。还是能用。我取消了css的注释。断了。我花了点时间去看CSS,但最终我找到了......所以只要忽略每个文本上的指针事件就可以了。

text{
    pointer-events: none;
} 

...所以就忽略所有文本对象上的指针事件... 对吗? 因为这听起来是个好主意。

删掉这一行后,所有的东西都能正常工作了。对不起,狼来了。

干杯,gs

© www.soinside.com 2019 - 2024. All rights reserved.