2

d3をクリックしてプロットポイントの色を変更しようとしていますが、現時点ではこれを機能させることができないようです。以下のコメント行は色を白からマゼンタに変更しますが、toggleColor関数は何もしないようです。実際には、アラートは最初の実行時にのみ発生し、ポイントがクリックされたときには発生しません。私はここで何が間違っているのですか?

var circle =graph.selectAll( "circle.value")
    .data(data)
    .enter()。append( "circle")
    .attr( "class"、 "value")
    .attr( "cx"、function(d){return x(d.hour);})
    .attr( "cy"、function(d){return y(d.value);})
    .attr( "r"、5)
    //.on("click"、function(){d3.select(this).attr( "class"、 "flagged");});
    .on( "クリック"、toggleColor);


var toggleColor =(function(){
    //適切な対策のためにアラートをスローします。。。
    alert( "クリックしましたか?")
    var currentColor = "white";
    function(){を返す

        currentColor = currentColor == "white"?"マゼンタ":"白";
        d3.select(this).atrr( "class"、 "flagged");
    }
   })();

4

1 に答える 1

4

そもそもvar toggleColor、クリックイベントを配線している時点ではまだ定義されていません(ページのさらに下で定義されているため)。だからあなたはそれを上に動かす必要があります。

次に、実行時にアラートが1回だけ表示されるのは、そのコードが実行されるときだからです。()お気づきの方もいらっしゃると思いますが、コードの最後の行にあるように、外部関数は宣言された直後に実行されます。それalert()が呼ばれるときです。内部関数はクリック時に実際に実行されるコードであるため、内部関数の本体(返されるもの)に移動する必要があります。

于 2012-06-12T00:57:15.030 に答える