簡體   English   中英

d3 javascript click函數調用

[英]d3 javascript click function call

我正在嘗試讓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("click", toggleColor);


var toggleColor = (function(){
    // throw in an alert for good measure. . .
    alert("Clicked?")
    var currentColor = "white";
    return function(){

        currentColor = currentColor == "white" ? "magenta" : "white";
        d3.select(this).atrr("class", "flagged");
    }
   })();

首先,在連接click事件時,仍未定義var toggleColor (因為它是在頁面下方定義的)。 因此,您需要將其向上移動。

然后,警報在運行時僅出現一次的原因是因為那是該代碼運行的時間。 如果您注意到,外部函數在聲明之后立即執行,如代碼最后一行的() 那是當alert()被調用時。 您需要將其移動到內部函數的主體(返回的主體)中,因為該內部函數是在單擊時實際運行的代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM