2016-06-17 3 views
0

Я работаю с Javascript, где у меня есть выпадающий список, полученный из массива (список имен потоков), и всякий раз, когда этот выбор массива изменяется (onchange()), детали массива (атрибуты и типы) должны быть получены из двух массивов (два массива 1d-атрибутов, тип) и отображаться в виде таблицы ниже выпадающего списка. Я написал функцию, которая отображает таблицу внутри деления, но она извлекает только последнюю пару данных и добавляет ее в таблицу. Но мне нужны все данные из массивов, которые будут отображаться в каждом столбце, чтобы они выглядели так, как будто они соответствуют друг другу.Динамически созданная таблица отображает только последние данные таблицы добавленных

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 whats this wr u define this –

+0

Как я уже упоминал в вопросе, это простой 1-й массив (из 5 элементов), который нужно взять в один столбец таблицы, а массив 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"; 

     } 
Смежные вопросы