使用Javascript更改HTML输入字段的数量
我正在开发一个HTML表单,它将数据发布到我的Web服务器,以便存储到数据库中。我对PHP和SQL代码没有问题,但我希望在客户端表单上有一个小功能: 将有一个下拉选择,询问您需要多少行特定类型。然后,一个小JavaScript应该为您生成这些 例如:使用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
<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中尝试,看看它是否能完成您所追求的那种功能。如果你不相信,一定要带着问题回来