Строки не добавляются в таблицу — javascript

#javascript #jquery #twitter-bootstrap #web3js

Вопрос:

У меня здесь есть этот код, который дает мне последнюю пару из смарт-контракта:

 document.getElementById("latestPairs").innerHTML = `<table class="table table-dark table-striped table-hover" id="latest"></table>`;
const table = document.getElementById("latest");
     const rowHeader = `<thead>
                            <tr>
                            <th>Token0</th>
                            <th>Token1</th>
                            <th>Pair</th>
                            </tr>
                        </thead>`
     table.innerHTML  = rowHeader;


pcsfactoryC.events.PairCreated({fromBlock:'latest'})
.on('data', async function(event){
         //console.log(event.returnValues);
         // Do something here
    let pairs =  event.returnValues    
    let token0 = event.returnValues['token0'];
    let token1 = event.returnValues['token1'];
    let getPair = event.returnValues['pair'];
    console.log(token0   " "   token1);
    add_row("latest", [event.returnValues['token0'], event.returnValues['token1'], event.returnValues['pair']]);

         
     })
     .on('error', console.error);
 

Это работает в консоли, как и ожидалось, однако строки не добавляются в таблицу, и я получаю следующую ошибку:

 Uncaught (in promise) ReferenceError: add_row is not defined
 

Как я могу это исправить и создать динамическую таблицу для своих данных?

Комментарии:

1. add_row() это не встроенная функция. Вы должны определить это. Если вы определили его, не могли бы вы, пожалуйста, включить его и обновить свой вопрос?

2. похоже, я его не определил, эта 1 строка кода должна быть функцией add_row

3. не могли бы вы, пожалуйста, сказать мне, как я могу это исправить, потому что я не нахожу на YouTube достойных руководств о том, как это сделать с помощью динамической таблицы

Ответ №1:

Вы должны создать свою собственную функцию add_row, так как она не является встроенной функцией в js

Кроме того, функция асинхронности кажется ненужной, так как вы не используете await.

Ответ №2:

Вы можете просто добавить innerHTML в таблицу. Оберните каждую строку <tr> и каждый столбец <td> .

 function add_row(id, token0, token1, pair){
   var table = document.getElementById(id);
   const rowdata = "<tr><td>" token0 "</td><td>" token1 "</td><td>" pair "</td></tr>";
   table.innerHTML  = rowdata;
}
 

add_row v2 (Вставить сверху, а не снизу)

 function add_row(id, token0, token1, pair){
  var table = document.getElementById(id);
  
  var thead = document.querySelector('#' id ' thead').innerHTML;

   const firstrowdata = "<tbody><tr><td>" token0 "</td><td>" token1 "</td><td>" pair "</td></tr></tbody>";
  const rowdata = "<tr><td>" token0 "</td><td>" token1 "</td><td>" pair "</td></tr>";
  
   if(table.rows.length == 1)table.innerHTML  = firstrowdata;
  else{
    var tbody = document.querySelector('#' id ' tbody').innerHTML;
    table.innerHTML = "<thead>"  thead   "</thead>"   "<tbody>"   rowdata   tbody   "</tbody>";
  }
}
 

Если вы хотите проверить это, вам нужно изменить способ вызова add_row() :

 /* Removed outer [ ] after ("latest", */
add_row("latest", event.returnValues['token0'], event.returnValues['token1'], event.returnValues['pair']);
 

Комментарии:

1. отлично, это работает, у меня седые волосы, я пытаюсь заставить это работать, чувак, спасибо

2. единственное, что мне не нравится, так это то, что самые новые записи не добавляются в верхнюю строку, а добавляются — как я могу это изменить?

3. Я добавил функцию вставки строки сверху, а не снизу.

4. Надеюсь, это помогло. Дайте мне знать, если у вас все еще есть какие-либо проблемы 🙂