【问题标题】:Rows are not beeing added to table- javascript行没有被添加到表中 - javascript
【发布时间】:2021-10-28 01:52:54
【问题描述】:

我这里有这段代码,可以让我从智能合约中获取最新的一对:

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

我该如何解决这个问题并为我的数据制作一个动态表?

【问题讨论】:

  • add_row() 不是内置函数。你必须定义它。如果您已定义它,您能否将其包括在内并更新您的问题?
  • 貌似我还没定义,这1行代码应该是add_row函数
  • 你能告诉我如何解决这个问题吗,因为我在 youtube 上找不到关于如何使用动态表执行此操作的不错的教程

标签: javascript jquery twitter-bootstrap web3js


【解决方案1】:

您必须创建自己的 add_row 函数,因为它不是 js 中的内置函数

由于您没有使用 await,因此似乎没有必要使用 async 函数。

【讨论】:

    【解决方案2】:

    您可以简单地将 innerHTML 附加到表格中。用&lt;tr&gt; 包裹每一,用&lt;td&gt; 包裹每一

    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']);
    

    【讨论】:

    • 这个作品太棒了,我的头发花白了,试图让这个 btch 工作,伙计,感谢
    • 我唯一不喜欢的是最新条目没有添加到顶行而是追加 - 我怎样才能扭转这种局面?
    • 我已经添加了在顶部而不是底部插入行的功能。
    • 希望对您有所帮助。如果您还有任何问题,请告诉我:)
    猜你喜欢
    • 1970-01-01
    • 2017-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-30
    相关资源
    最近更新 更多