【问题标题】:How do you get information from a form and put it in a table with HTML, CSS, and Javascript?如何从表单中获取信息并将其放入包含 HTML、CSS 和 Javascript 的表格中?
【发布时间】:2021-11-26 18:52:07
【问题描述】:

我是 HTML/CSS/JS 的新手,我想知道如何从表单中获取信息并将其存储在表格中。

例如,用户将在表单中输入他们的姓名并按下创建按钮。这将创建一个包含用户名的表。但是,即使在刷新选项卡后,我也希望数据保留在表中。我相信这需要一台服务器。请指出我正确的方向。下面是我的 HTML,后面是我的 JS。

说明: 当标签刷新时,其他访问该网站的人应该能够看到用户输入的表格中的数据。 每次用户在表格上按回车键时,它应该添加一个新行而不删除之前的行。

我相信我必须使用服务器,那么谁能告诉我如何将它与我想要做的事情结合使用,如上所述?谢谢!

HTML

<form>
        <label for="name">Name:</label><br>
        <input type="text" id="name" name="name"<br>
</form>


JS

function refresh() {
    var table = document.getElementById("infotable");
    let row = table.insertRow(1);
    let cell1 = row.insertCell(0);
    cell1.innerHTML = document.getElementById("name").value;
}

【问题讨论】:

    标签: javascript html forms


    【解决方案1】:

    嗯,实际上您不需要服务器。您可以将数据保存在localStorage。查看这个注释示例:

    const result = document.getElementById("result");
    const saved = JSON.parse(localStorage.getItem("save")); // get saved items
    if (saved) {
      const t =
        `<table>
        <tr>
          <th>Name</th>
          <th>Age</th>
          <th>Hobby</th>
        </tr>
        <tr>
          <td>${saved.name}</td>
          <td>${saved.age}</td>
          <td>${saved.hobby}</td>
        </tr>
      </table>`;
      result.innerHTML = t; // show the result
    }
    
    const form = document.getElementById("my-form"); // get the form element
    form.addEventListener("submit", e => {
      // detect once the submit button is clicked
      e.preventDefault(); // Don't allow the form to redirect to another page
      const {
        elements
      } = form; // Get input elements so we can retrieve their values
      const output = {
        name: elements.name.value, // get name
        age: +elements.age.value, // get age; the "+" in front converts it to a number
        hobby: elements.hobby.value // get hobby
      };
      localStorage.setItem("save", JSON.stringify(output)); // save output to localStorage
      // Create a template
      const template =
        `<table>
        <tr>
          <th>Name</th>
          <th>Age</th>
          <th>Hobby</th>
        </tr>
        <tr>
          <td>${output.name}</td>
          <td>${output.age}</td>
          <td>${output.hobby}</td>
        </tr>
      </table>`;
      result.innerHTML = template; // show the result
    });
    <form id="my-form">
      <!-- some dummy inputs -->
      <label for="name">Name:</label>
      <input type="text" id="name" name="name" placeholder="Enter your name...">
      <br>
      <label for="age">Age:</label>
      <input type="number" id="age" name="age" placeholder="Enter your age...">
      <br>
      <label for="hobby">Hobby:</label>
      <input type="text" id="hobby" name="hobby" placeholder="Enter your hobby...">
      <br>
      <input type="submit" />
    </form>
    <div id="result"></div>

    注意:localStorage 在上面的示例中不起作用,因为嵌入不允许它。

    【讨论】:

    • 澄清一下,最上面的代码块在 javascript 中,对吧?如果是这样,我尝试使用它,但是当我使用您编写的内容时它不会保存用户的代码。当我试图在我的代码中实现它时,它没有正确地完成它的功能。忽略我的项目,您能否尝试找出您的代码对我不起作用的原因?
    • 你在哪里运行的?
    • 我正在使用 VSCode,我在 Chrome 上运行它。
    • 您收到的错误信息是什么?
    • 没有错误信息,但是当我重新加载它时,它并没有保存。它只是在表格行中显示“未定义”,而不是我在重新加载之前输入的信息。但是,我完全有可能误解了代码的用途。
    【解决方案2】:

    如果您想要长期存储,是的,您需要使用某种带有数据库的后端解决方案。但是,还有其他选项,例如 cookie 和 localStorage。

    由于安全限制,这在 sn-p 中不起作用,但它会将用户输入保留在 localStorage 中,并在他们每次访问页面时显示

    https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage

    <form onsubmit='do_fn()'>
            <label for="name">Name:</label><br>
            <input type="text" id="name" name="name"<br>
            <button type='submit'>submit</button>
    </form>
    
    <div class='showname' hidden>Your name is <span></span></div>
    
    <script>
      function do_fn() {
        localStorage.setItem('name', document.querySelector('#name').value);
      }
    
      // here is where you can detect it when they come back.
      window.addEventListener('DOMContenetLoaded', function() {
        let n = localStorage.getItem('name');
        let d = document.querySelector('.showname')
        if (n && n!='')  {
          d.removeAttribute('hidden');
          d.querySelector('span').innerText = n;
        }
      })
    </script>
    

    【讨论】:

    • 非常感谢,但我忘了澄清我希望其他人也能看到它。当多人访问该网站时,他们应该能够在表格中看到该用户的数据。这可能吗?
    • 那么你需要一个服务器。
    • 对不起,我对这一切都不熟悉,但我该怎么做呢?有什么方法可以创建服务器吗?
    • 您可以使用 firebase 之类的东西 - 这是一个托管数据库解决方案,提供大量免费套餐。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-15
    • 2020-05-09
    • 1970-01-01
    • 2018-11-16
    • 2019-03-23
    • 2015-08-19
    • 1970-01-01
    相关资源
    最近更新 更多