7

我想知道是否有人知道使轴上的标签可点击的方法。现在我的轴生成如下:

    // Add an x-axis with label.
    svg.append("g")
        .attr("id", "xaxis")
        .attr("class", "x axis")
        .attr("transform", "translate(" + (margin.left + margin.left_padding) + "," + height + ")")
        .attr("text_anchor", "top")
        .call(d3.svg.axis().scale(x).orient("bottom"))
        .selectAll("text")
            .style("text-anchor", "end")
            .attr("font-size", "12")
            .attr("dx", "-.8em")
            .attr("dy", ".15em")
            .attr("transform", function(d) {
                return "rotate(-45)"
            })


    // Add a y-axis with label.
    svg.append("g")
        .attr("id", "yaxis")
        .attr("class", "y axis")
        .attr("transform", "translate(" + (margin.left + margin.left_padding) + "," + 0 + ")")
        .attr("text-anchor", "right")
        .call(d3.svg.axis().scale(y).orient("left"))
        .selectAll("text")
           .attr("font-size", "12")

    }

我想知道如何使轴上的每个数字/标签都有一个 onclick 事件。

4

1 回答 1

15

您可以使用 d3 选择它们,然后使用.on('click', function)

对于您的代码,这看起来像这样:

d3.select('#xaxis')
    .selectAll('.tick.major')
    .on('click',clickMe)

function clickMe(){alert("I've been clicked!")}

请注意,这将选择整个刻度,而不仅仅是文本,因为.tick.major它是包含刻度标签(文本)和刻度本身(SVG 行)的组的类。

您还可以d在您的报价上调用的函数中用作参数。如果这样做,d将包含刻度的值。例如,以下将发送包含每个刻度值的警报:

d3.select('#xaxis')
    .selectAll('.tick.major')
    .on('click',clickMe)

function clickMe(d){alert(d)}

请注意,您可能可以调用.major而不是.tick.major如果只有主要刻度有major类。

于 2013-06-24T18:56:56.573 回答