从JS

时间:2017-02-13 16:37:56

标签: javascript csv d3.js

好吧,所以我在javascript上相当新鲜,我会承认,而且我确信这篇文章非常明显......我知道我已经知道了做一些非常愚蠢的事情,但我无法将手指放在上面。

我尝试制作一个下拉菜单,显示来自"子类别"的内容。我正在使用的这个csv文件中的列,但到目前为止我只能获得一个空格的下拉列表。

我做错了什么?

d3.csv("PCC.csv", function(error, data) {

    var select = d3.select("body")
        .append("div")
        .append("select")

    select
        .on("change", function(d) {
            var value = d3.select(this).property("value");
            alert(value);
        });

    select.selectAll("option")
        .data(data)
        .enter()
        .append("option")
        .attr("value", function(d) {
            return d.TPC;
        })
        .text(function(d) {
            return d.Subcategory;
        })

});

2 个答案:

答案 0 :(得分:3)

这是一种仅使用D3创建下拉列表的方法。

鉴于您的CSV具有以下结构:

subCategory,TPC
foo,25
bar,19
baz,42

您可以将该数据绑定到附加option的输入选择。查看演示:



var body = d3.select("body");
var data = d3.csvParse(d3.select("#csv").text());

var menu = body.append("select");

menu.selectAll("foo")
    .data(data)
    .enter()
    .append("option")
    .attr("value", d=>d.TPC)
    .text(d=>d.subCategory);

menu.on("change", function(){
    console.log(this.value)
});

pre{
  display:none;
  }

<script src="https://d3js.org/d3.v4.min.js"></script>
<pre id="csv">subCategory,TPC
foo,25
bar,19
baz,42</pre>
&#13;
&#13;
&#13;

答案 1 :(得分:2)

好的,这是所有的例子(你只需要编辑d3和csv数据的路径.. 问题是填充组合的子类别不是唯一的,这对我来说看起来很奇怪,因为它们与同一子类别的不同值相关联。

<!DOCTYPE html>
<html>

  <head>


    <title> stack test </title>
    <script type="text/javascript" src="d3/d3.v3.min.js"></script>
        <script type="text/javascript">



     window.onload = function()
        {
        d3.csv("data/PCC-edit.csv",

            function(d) {
                return {

                    TPC: +d.TPC,
                    Subcategory: d.Subcategory

                };  
            },      
            function(data) {
                console.log(data)
                populate_ComboExample(data)
            });
        }

        function populate_ComboExample(data) {

            var example_list= {};
            var example_text= {};
            console.log(data.length)
            for (i=0;i<data.length; i++ ) { // you can calculate the length with js, I choose 10 here for the example
                example_list[i]=data[i].TPC;
                example_text[i]=data[i].Subcategory;
            }


            var select  = document.getElementById("exampleList")

            for (i=0; i < data.length; i++ ) {
                var el = document.createElement("option");
                var temp=example_text[i]
                el.textContent = temp;
                el.value =example_list[i];
                select.appendChild(el);
            }
        }

        function combo_change(thelist) {

            var idx_1 = thelist.selectedIndex;
            alert(thelist.options[idx_1].value);

        }

    </script>


    </head>

    <body>

    <div class="">

    </div>

    <div id="option">

    <form class="comboExample">
    <h4>Subcategory</h4>
    <select name="example_select" id="exampleList" onChange="combo_change(this)">
    </select> 
    </form>


    </div>


</body>

</html>

ps:我使用d3 v3,但应该适用于d3 v4。我建议你使用“console.log”并检查控制台,看看当它不起作用时发生了什么错误。