【问题标题】:Bind click event to D3 element将点击事件绑定到 D3 元素
【发布时间】:2014-08-15 09:24:27
【问题描述】:

以下结果导致方法nodeClick() 在页面加载时被调用一次(不点击)。为什么?如何让nodeClick()函数只在点击元素时触发?

代码:

var node = svg.selectAll(".node")
    .on("click", nodeClick());

在上下文中:

var width = 960,
   height = 500;

var color = d3.scale.category10();

var nodes = [],
    links = [];

var force = d3.layout.force()
    .nodes(nodes)
    .links(links)
    .charge(-400)
    .linkDistance(120)
    .size([width, height])
    .on("tick", tick);

var svg = d3.select("body").append("svg")
    .attr("width", width)
    .attr("height", height);

var node = svg.selectAll(".node")
    .on("click", nodeClick()),
    link = svg.selectAll(".link");

function start() {
    link = link.data(force.links(), function(d) { return d.source.id + "-" + d.target.id; });
    link.enter().insert("line", ".node").attr("class", "link");
    link.exit().remove();

    node = node.data(force.nodes(), function(d) { return d.id;});
    node.enter().append("circle").attr("class", function(d) { return "node " + d.id; }).attr("r", 8);
    node.exit().remove();

    force.start();
}

function nodeClick() {
    console.log("ASDASDASD");
}

function tick() {
    node.attr("cx", function(d) { return d.x; })
        .attr("cy", function(d) { return d.y; })

    link.attr("x1", function(d) { return d.source.x; })
        .attr("y1", function(d) { return d.source.y; })
        .attr("x2", function(d) { return d.target.x; })
        .attr("y2", function(d) { return d.target.y; });
}

【问题讨论】:

    标签: javascript d3.js events dom-events


    【解决方案1】:

    您实际上是在设置点击处理程序时调用该函数。您需要将一个函数附加到处理程序,该处理程序将在调用时调用您实际想要的函数:

    .on("click", function() { nodeClick() });
    

    或者等效地给它一个函数名而不调用函数(更短)

    .on("click", nodeClick);
    

    【讨论】:

    • 好的,我换了行。现在在页面加载时不再调用 nodeClick() 并且没有错误。但是,当我单击元素时没有任何反应。可能是因为元素是在用户输入事件时添加的(而不是在页面加载时)?
    • 您需要在 start 函数内以及添加/删除节点时运行 .on("click", ...) 代码。
    猜你喜欢
    • 1970-01-01
    • 2014-09-04
    • 2016-07-01
    • 1970-01-01
    • 2016-09-02
    • 1970-01-01
    • 2017-10-26
    • 2019-02-05
    • 2017-03-22
    相关资源
    最近更新 更多