【问题标题】:reload html table on form submit在表单提交上重新加载 html 表
【发布时间】:2018-08-23 14:49:50
【问题描述】:

我有一个表单,在提交时会根据用户的输入显示具有不同数据的表格(对 php 文件的 ajax 请求)。每次用户提交表单时,我有没有办法用新信息动态重新加载表格?截至目前,数据在每次提交后一直附加到表中,并继续添加到最后一次提交数据中。任何建议将不胜感激,谢谢!

HTML

<form id = "infoForm" 
action="file.php" method="post">
    <b>Enter info:</b> <input type = "text" name = "info" 
id = "infoInput" maxlength = "10" required >
     <button type = "submit" id = "submit_form">Submit</button>
 </form>
 <table id = "infoTable">
     <tbody>
         <tr>
             <th>Name</th>
             <th>Number</th>
         </tr>
     </tbody>
 </table>

JavaScript

$("#infoForm").submit(function() { 
    $("#infoTable").fadeIn(400);

    //InputData is an array that contains the user input data
    $.post( "file.php", InputData,
        function( data ){

            var names = data.names; //from PHP file
            var numbers = data.numbers; //from PHP file


            var namesArray = names.split(',');
            var numbersArray = numbers.split(',');
            for(var i = 0; i < namesArray.length; i++) {
              $("#infoTable > tbody").append('<tr><td>'+namesArray[i]+'</td><td>'+numbersArray[i]+'</td></tr>');
          }


    }, "json");
    return false;

});

【问题讨论】:

  • append()之前添加对.empty()的调用
  • 另外,将 namesnumbers 值作为 JSON 中的数组而不是您需要手动拆分的字符串返回不是更有意义吗?
  • @RoryMcCrossan 是的,您将这些值作为数组返回是对的。感谢您的帮助!
  • @ski11s - 看看这个 Stackoverflow 问题和答案,它可能会帮助您改进这个解决方案:stackoverflow.com/questions/18673860/…
  • @Chris 我一定会看看的。谢谢!

标签: javascript jquery html


【解决方案1】:

您需要清理tbody,然后追加新记录。

试试这个:

$("#infoForm").submit(function() { 
    $("#infoTable").fadeIn(400);

    //InputData is an array that contains the user input data
    $.post( "file.php", InputData,
        function( data ){

            var names = data.names; //from PHP file
            var numbers = data.numbers; //from PHP file


            var namesArray = names.split(',');
            var numbersArray = numbers.split(',');
            $("#infoTable > tbody").empty(); // clean the tbody before adding new data
            for(var i = 0; i < namesArray.length; i++) {
              $("#infoTable > tbody").append('<tr><td>'+namesArray[i]+'</td><td>'+numbersArray[i]+'</td></tr>');
          }


    }, "json");
    return false;

});

【讨论】:

  • 这与评论中写的没有什么不同,实际上评论中提供的解决方案更好,因为它使用了链接
  • 链接?你在哪里看到的?实际上你必须在进入for循环之前清空表体。
  • 他的意思是通过这个.empty() before the append() 链接到$("#infoTable &gt; tbody").empty().append(rest of the code)
  • 但如果你在循环中这样做,tbody 会不断删除其中存在的记录,最后会添加一行。
  • @brk 我的意思一般是在append() 之前。如果您在for 循环中执行此操作,那么您只会看到附加的最后一条记录。这个答案是正确的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-01
  • 2013-11-19
  • 1970-01-01
  • 1970-01-01
  • 2017-02-03
相关资源
最近更新 更多