2016-06-17 31 views
0

私は配列(ストリーム名のリスト)から派生したドロップダウンリストを持っており、この配列の選択が(配列番号: (属性と型)は、2つの配列(2つの1次元配列 - 属性、型)から導出され、ドロップダウンの下に表形式で表示されます。ディビジョン内のテーブルを表示する関数を作成しましたが、最後のデータ・ペアだけを取り出してテーブルに追加します。しかし、私は配列のすべてのデータを各列に表示してお互いに対応しているかのように見えるようにする必要があります。動的に作成されたテーブルは、最後に追加されたテーブルデータのみを表示します

JS機能メインアレイ作成する:アレイ上の個々のストリームデータを取得するために

//Generate array to hold predefined Stream Definitions 
     function PredefinedStreams() { 
      var StreamArray = new Array(3); 
      for (var q = 0; q < 3; q++) 
      { 
       StreamArray[q] = new Array(4); 
       for (var w=1; w<3; w++) 
       { 
        StreamArray[q][w] = new Array(5); 
       } 
      } 

      StreamArray[0][0]="Stream1"; 
      StreamArray[0][1][0]="1_attr1"; 
      StreamArray[0][1][1]="1_attr2"; 
      StreamArray[0][1][2]="1_attr3"; 
      StreamArray[0][1][3]="1_attr4"; 
      StreamArray[0][1][4]="1_attr5"; 
      StreamArray[0][2][0]="1_type1"; 
      StreamArray[0][2][1]="1_type2"; 
      StreamArray[0][2][2]="1_type3"; 
      StreamArray[0][2][3]="1_type4"; 
      StreamArray[0][2][4]="1_type5"; 
      StreamArray[0][3] = "define stream Stream1 (1_attr1 1_type1, 1_attr2 1_type2, 1_attr3 1_type3, 1_attr4 1_type4, 1_attr5 1_type5);"; 

      StreamArray[1][0]="Stream2"; 
      StreamArray[1][1][0]="2_attr1"; 
      StreamArray[1][1][1]="2_attr2"; 
      StreamArray[1][1][2]="2_attr3"; 
      StreamArray[1][1][3]="2_attr4"; 
      StreamArray[1][1][4]="2_attr5"; 
      StreamArray[1][2][0]="2_type1"; 
      StreamArray[1][2][1]="2_type2"; 
      StreamArray[1][2][2]="2_type3"; 
      StreamArray[1][2][3]="2_type4"; 
      StreamArray[1][2][4]="2_type5"; 
      StreamArray[1][3] = "define stream Stream2 (2_attr1 2_type1, 2_attr2 2_type2, 2_attr3 2_type3, 2_attr4 2_type4, 2_attr5 2_type5);"; 

      StreamArray[2][0]="Stream3"; 
      StreamArray[2][1][0]="3_attr1"; 
      StreamArray[2][1][1]="3_attr2"; 
      StreamArray[2][1][2]="3_attr3"; 
      StreamArray[2][1][3]="3_attr4"; 
      StreamArray[2][1][4]="3_attr5"; 
      StreamArray[2][2][0]="3_type1"; 
      StreamArray[2][2][1]="3_type2"; 
      StreamArray[2][2][2]="3_type3"; 
      StreamArray[2][2][3]="3_type4"; 
      StreamArray[2][2][4]="3_type5"; 
      StreamArray[2][3] = "define stream Stream3 (3_attr1 3_type1, 3_attr2 3_type2, 3_attr3 3_type3, 3_attr4 3_type4, 3_attr5 3_type5);"; 


      return StreamArray; 
     } 

JS機能を:

var streams = '<select id="streamSelect" onchange="showStreamDef()">', streamtypes = PredefinedStreams(); 
     var streamDef = streamtypes = PredefinedStreams(); 
     var stream1_attr = streamtypes = PredefinedStreams(); 
     var stream1_type = streamtypes = PredefinedStreams(); 
     var stream2_attr = streamtypes = PredefinedStreams(); 
     var stream2_type = streamtypes = PredefinedStreams(); 
     var stream3_attr = streamtypes = PredefinedStreams(); 
     var stream3_type = streamtypes = PredefinedStreams(); 
     var PredefinedStreamComboDiv=document.createElement('div'); 
     function createattr() 
     { 
      for (var q = 0; q < 3; q++) 
      { 
       streams += "<option value='"+streamtypes[q][0]+"'>"+streamtypes[q][0]+"</option>"; 
       streamDef += streamtypes[q][3]; 
       for (var w=0; w<3; w++) 
       { 
         for(var r=0; r<5;r++) 
         { 
          if(q==0 && w==1) 
          { 
           stream1_attr[r] = streamtypes[q][w][r]; 
          } 
          if(q==0 && w==2) 
          { 
           stream1_type[r] = streamtypes[q][w][r]; 
          } 

          if(q==1 && w==1) 
          { 
           stream2_attr[r]= streamtypes[q][w][r]; 
          } 
          if(q==1 && w==2) 
          { 
           stream2_type [r]= streamtypes[q][w][r]; 
          } 
          if(q==2 && w==1) 
          { 
           stream3_attr [r]= streamtypes[q][w][r]; 
          } 
          if(q==2 && w==2) 
          { 
           stream3_type [r]= streamtypes[q][w][r]; 
          } 
         } 
       } 


      } 
      streams += '</select>'; 
      //streamDef += '</select>'; 
      PredefinedStreamComboDiv.className="attr-combobox-style"; 
      PredefinedStreamComboDiv.innerHTML= streams; 
      PredefinedStream.appendChild(PredefinedStreamComboDiv); 


     } 

JSは、テーブルを作成する機能:

function showStreamDef() 
     { 
      alert("Displaying Stream Details"); 

      var choice=document.getElementById("streamSelect"); 
      var selectedStr = choice.options[choice.selectedIndex].text; 

      var myTableDiv = document.getElementById("streamDefDiv"); 
      var table = document.createElement('TABLE'); 
      var tableBody = document.createElement('TBODY'); 

      table.border = '1'; 
      table.appendChild(tableBody); 

      var tr = document.createElement('TR'); 
      var td = document.createElement('TD'); 
      td.appendChild(document.createTextNode("Attribute")); 
      tr.appendChild(td); 
      var td = document.createElement('TD'); 
      td.appendChild(document.createTextNode("Type")); 
      tr.appendChild(td); 

      if(selectedStr=="Stream1") 
      { 

       for (var d = 0; d < stream1_attr.length; d++) 
       { 
        var tr = document.createElement('TR'); 
        var td = document.createElement('TD'); 
        td.appendChild(document.createTextNode(stream1_attr[d])); 
        tr.appendChild(td); 
        var td = document.createElement('TD'); 
        td.appendChild(document.createTextNode(stream1_type[d])); 
        tr.appendChild(td); 
       } 

      } 

      else if(selectedStr=="Stream2") 
      { 
       for (var d = 0; d < stream1_attr.length; d++) 
       { 
        var tr = document.createElement('TR'); 
        var td = document.createElement('TD'); 
        td.appendChild(document.createTextNode(stream2_attr[d])); 
        tr.appendChild(td); 
        var td = document.createElement('TD'); 
        td.appendChild(document.createTextNode(stream2_type[d])); 
        tr.appendChild(td); 
       } 
      } 

      else 
      { 
       for (var d = 0; d < stream1_attr.length; d++) 
       { 
        var tr = document.createElement('TR'); 
        var td = document.createElement('TD'); 
        td.appendChild(document.createTextNode(stream3_attr[d])); 
        tr.appendChild(td); 
        var td = document.createElement('TD'); 
        td.appendChild(document.createTextNode(stream3_type[d])); 
        tr.appendChild(td); 
       } 
      } 

      tableBody.appendChild(tr); 
      myTableDiv.appendChild(table); 

      document.getElementById('streamDefDiv').style.display = "block"; 

     } 
+0

あなたのコードの一部が欠落しています。 stream1_attrこれは何を定義するのですか –

+0

質問で触れたように、単純な1次元配列(5要素)をテーブルの1つの列に配置する必要があり、attr_type配列(1次元配列)にはテーブルの次の列に移動されます。とにかく、これらを追加します。ありがとう –

+0

フィドルやプランカを作成して修正するのが簡単になる –

答えて

0

この問題は、私がテーブルを動的に生成する関数でのみ発生していました。 質問に示されているように、私は行(tr)を最後にテーブル本体に追加しました。これにより、最後に保存されたデータ・ペア行のみが表に追加されます。したがって、各行を追加するには:各テーブルデータ(td)が行(tr)に追加されると、その特定のtrをテーブル本体に追加する必要があります。

function showStreamDef() 
     { 

      var choice=document.getElementById("streamSelect"); 
      var selectedStr = choice.options[choice.selectedIndex].text; 

      var myTableDiv = document.getElementById("streamDefDiv"); 
      var table = document.createElement('TABLE'); 
      var tableBody = document.createElement('TBODY'); 

      table.border = '1'; 
      table.appendChild(tableBody); 

      var tr = document.createElement('TR'); 
      var td = document.createElement('TD'); 
      td.appendChild(document.createTextNode("Attribute")); 
      tr.appendChild(td); 
      var td = document.createElement('TD'); 
      td.appendChild(document.createTextNode("Type")); 
      tr.appendChild(td); 
      tableBody.appendChild(tr); 

      if(selectedStr=="Stream1") 
      { 

       for (var d = 0; d < stream1_attr.length; d++) 
       { 
        var tr = document.createElement('TR'); 
        var td = document.createElement('TD'); 
        td.appendChild(document.createTextNode(stream1_attr[d])); 
        tr.appendChild(td); 
        var td = document.createElement('TD'); 
        td.appendChild(document.createTextNode(stream1_type[d])); 
        tr.appendChild(td); 
        tableBody.appendChild(tr); 
       } 

      } 

      else if(selectedStr=="Stream2") 
      { 
       for (var d = 0; d < stream1_attr.length; d++) 
       { 
        var tr = document.createElement('TR'); 
        var td = document.createElement('TD'); 
        td.appendChild(document.createTextNode(stream2_attr[d])); 
        tr.appendChild(td); 
        var td = document.createElement('TD'); 
        td.appendChild(document.createTextNode(stream2_type[d])); 
        tr.appendChild(td); 
        tableBody.appendChild(tr); 
       } 
      } 

      else 
      { 
       for (var d = 0; d < stream1_attr.length; d++) 
       { 
        var tr = document.createElement('TR'); 
        var td = document.createElement('TD'); 
        td.appendChild(document.createTextNode(stream3_attr[d])); 
        tr.appendChild(td); 
        var td = document.createElement('TD'); 
        td.appendChild(document.createTextNode(stream3_type[d])); 
        tr.appendChild(td); 
        tableBody.appendChild(tr); 
       } 
      } 


      myTableDiv.appendChild(table); 

      document.getElementById('streamDefDiv').style.display = "block"; 

     } 
関連する問題