使用Javascript更改HTML输入字段的数量

使用Javascript更改HTML输入字段的数量,javascript,html,forms,Javascript,Html,Forms,我正在开发一个HTML表单,它将数据发布到我的Web服务器,以便存储到数据库中。我对PHP和SQL代码没有问题,但我希望在客户端表单上有一个小功能: 将有一个下拉选择,询问您需要多少行特定类型。然后,一个小JavaScript应该为您生成这些 例如: <form method="POST" action="act.php"> <select name="numrows"><option>1</option><option>2</o

我正在开发一个HTML表单,它将数据发布到我的Web服务器,以便存储到数据库中。我对PHP和SQL代码没有问题,但我希望在客户端表单上有一个小功能:

将有一个下拉选择,询问您需要多少行特定类型。然后,一个小JavaScript应该为您生成这些

例如:

<form method="POST" action="act.php">
<select name="numrows"><option>1</option><option>2</option></select>
<table>
    <tr>
        <td><input type="text" name="row[x]" /></td>
    </tr>
</table>
</form>
现在,我希望有尽可能多的副本,如numrows中所选,并且每个副本的名称中都有相应的编号,以替换x。我将如何在JavaScript中实现这一点


我知道我需要编写一个方法,并在select标记中使用onchange事件引用它,但我完全不知道如何编写这个函数。

您不应该使用Write-更好的方法是使用JavaScript将对象插入到表对象下的DOM中。一般来说,DOM更改比写入要干净得多,当他们将select从2更改为1时,不能使用write删除额外的行

谷歌为添加行表javascript-它将显示


然后,对于每一行,您添加一个TD元素,并在每个TD下添加一个输入元素。

您不应该使用write,更好的方法是使用JavaScript将对象插入到表对象下的DOM中。一般来说,DOM更改比写入要干净得多,当他们将select从2更改为1时,不能使用write删除额外的行

谷歌为添加行表javascript-它将显示


然后,对于每一行,您添加一个TD元素,并在每个TD下添加一个input元素。

您可以使用javascript模板引擎,它将HTML与JS逻辑清晰地分开

我是《看演示页面和教程》的作者。当我转向JSON时,这是我替换XML/XSLT堆栈的方式


如果你不喜欢这种风格,你可以在网上搜索,找到很多这样的工具,它们从根本上改变了你构建动态网页的方式。

你可以使用javascript模板引擎,它将HTML与JS逻辑清晰地分离开来

我是《看演示页面和教程》的作者。当我转向JSON时,这是我替换XML/XSLT堆栈的方式


如果你不喜欢这种风格,你可以在网上搜索,找到很多这样的工具,它们从根本上改变了你构建动态网页的方式。

这可以通过jQuery轻松实现

('#mytable').append('<tr>...</tr>');
您首先需要捕获更改,我假设选择numrows是numrows的ID

('#selectnumrows').change(function() {
var x = $(this).val(); // would better if you parse it
for (var i = 1; i < x; i ++) {
('#mytable').append('<tr><td><input type="text" name="row[' + x + ']" /></td></tr>');
} 
});

使用jQuery将使任务更加容易。获得一些背景知识,您将能够理解代码/更好地理解它。

这可以通过jQuery轻松实现

('#mytable').append('<tr>...</tr>');
您首先需要捕获更改,我假设选择numrows是numrows的ID

('#selectnumrows').change(function() {
var x = $(this).val(); // would better if you parse it
for (var i = 1; i < x; i ++) {
('#mytable').append('<tr><td><input type="text" name="row[' + x + ']" /></td></tr>');
} 
});

使用jQuery将使任务更加容易。获得一些背景知识,您将能够理解代码/更好地理解它。

我相信您可以通过jQuery等各种方式来实现这一点,但如果您想要一个可移植的、符合DOM的解决方案,您可能希望回到如下基本点:

<html>
<head>
  <script type="text/javascript">
    function removerows (tablebody) {
      var rows = tablebody.getElementsByTagName("tr");
      while (rows.length)
        rows[0].parentNode.removeChild(rows[0]);
    }

    function addrows (tablebody, n) {
      for (var i=0; i<n; i++) {
        var row = document.createElement("tr");
        var titlecell = document.createElement("td");
        titlecell.appendChild(document.createTextNode("Row " + i));
        row.appendChild(titlecell);

        var cell = document.createElement("td");
        var input = document.createElement("input");
        input.setAttribute("type", "text");
        input.setAttribute("name", "row["+i+"]");
        cell.appendChild(input);
        row.appendChild(cell);
        tablebody.appendChild(row);
      }
    }

    function change () {
      var select = document.getElementById("numrows");
      var index = select.selectedIndex
      var n = parseInt(select.value);
      var tablebody = document.getElementById("maintablebody");
      removerows(tablebody);
      addrows(tablebody, n);
    }
  </script>
</head>
<body>
  <form method="POST" action="act.php">
  <select id="numrows" name="numrows" onchange="change()">
    <option value="1">1</option>
    <option value="2">2</option>
    <option value="3">3</option>
    <option value="4">4</option>
    <option value="5">5</option>
  </select>
  <table id="maintable">
    <tbody id="maintablebody">
      <tr>
        <td>Row 0</td>
        <td><input type="text" name="row0" /></td>
      </tr>
    </tbody>
  </table>
  <input type="submit"/>
  </form>
</body>
</html>
这里我使用的是W3C和。唯一不太标准的方面是对select元素使用onchange属性。如果您想对此保持纯粹,您可能希望使用addElementListener和attachEvent


将此HTML粘贴到一个文件中,然后在Firefox和/或Internet Explorer中尝试,看看它是否能完成您所追求的那种功能。如果您还不确定,一定要带着问题回来。

我相信您可以通过jQuery等各种方式来实现这一点,但是如果您想要一个可移植的、符合DOM的解决方案,您可能希望回到如下基本点:

<html>
<head>
  <script type="text/javascript">
    function removerows (tablebody) {
      var rows = tablebody.getElementsByTagName("tr");
      while (rows.length)
        rows[0].parentNode.removeChild(rows[0]);
    }

    function addrows (tablebody, n) {
      for (var i=0; i<n; i++) {
        var row = document.createElement("tr");
        var titlecell = document.createElement("td");
        titlecell.appendChild(document.createTextNode("Row " + i));
        row.appendChild(titlecell);

        var cell = document.createElement("td");
        var input = document.createElement("input");
        input.setAttribute("type", "text");
        input.setAttribute("name", "row["+i+"]");
        cell.appendChild(input);
        row.appendChild(cell);
        tablebody.appendChild(row);
      }
    }

    function change () {
      var select = document.getElementById("numrows");
      var index = select.selectedIndex
      var n = parseInt(select.value);
      var tablebody = document.getElementById("maintablebody");
      removerows(tablebody);
      addrows(tablebody, n);
    }
  </script>
</head>
<body>
  <form method="POST" action="act.php">
  <select id="numrows" name="numrows" onchange="change()">
    <option value="1">1</option>
    <option value="2">2</option>
    <option value="3">3</option>
    <option value="4">4</option>
    <option value="5">5</option>
  </select>
  <table id="maintable">
    <tbody id="maintablebody">
      <tr>
        <td>Row 0</td>
        <td><input type="text" name="row0" /></td>
      </tr>
    </tbody>
  </table>
  <input type="submit"/>
  </form>
</body>
</html>
这里我使用的是W3C和。唯一不太标准的方面是对select元素使用onchange属性。如果您想对此保持纯粹,您可能希望使用addElementListener和attachEvent

将此HTML粘贴到一个文件中,然后在Firefox和/或Internet Explorer中尝试,看看它是否能完成您所追求的那种功能。如果你不相信,一定要带着问题回来