Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
D3.js d3事件目标_D3.js - Fatal编程技术网

D3.js d3事件目标

D3.js d3事件目标,d3.js,D3.js,有没有一种方法可以不使用this访问事件目标(DOM元素)?我在一个对象中,我希望这个绑定到对象本身。全局d3.event显然不存储目标-d3.event.target不工作。有线索吗 编辑:这是我正在运行的代码(它是coffeescript): 浏览器控制台输出为 function e(){this.on("mousedown.drag",t).on("touchstart.drag",t)} 如果我添加一个调试器语句并手动检查对象,也是一样的。出于某种原因,d3.event.target

有没有一种方法可以不使用
this
访问事件目标(DOM元素)?我在一个对象中,我希望
这个
绑定到对象本身。全局
d3.event
显然不存储目标-
d3.event.target
不工作。有线索吗

编辑:这是我正在运行的代码(它是coffeescript):

浏览器控制台输出为

function e(){this.on("mousedown.drag",t).on("touchstart.drag",t)} 

如果我添加一个
调试器
语句并手动检查对象,也是一样的。出于某种原因,
d3.event.target
返回一个函数而不是事件对象。

我可以重新创建它,我很想把它作为一个bug记录下来-我认为将拖动控件本身作为
d3.event.target
传递没有任何用处

在这种情况下,修复似乎很容易-只需调用
rect
选项上的拖动行为即可:

@rect = @nodes.append('svg:rect')
  .attr('width', @x 100)
  .attr('height', @y 50)

node_drag = d3.behavior.drag().origin(Object).on('drag', @drag_move)
@rect.call node_drag

但是,如果您的节点组中有多个元素,并且想要了解哪个元素正在被拖动,我会觉得这很烦人。

我通过在dragmove函数中重置d3.event.target的值来解决这个问题:

d3.event.target=event.target


然后d3.event.target成为像drag()这样的函数的目标DOM元素instand…

我成功地使用了
d3.event.target
-你能在它不起作用的地方发布这个示例吗?
@rect = @nodes.append('svg:rect')
  .attr('width', @x 100)
  .attr('height', @y 50)

node_drag = d3.behavior.drag().origin(Object).on('drag', @drag_move)
@rect.call node_drag