我有以下代码来从常规输入读取值,
HTML:
<tr>
<th>Email:</th>
<td><input id="email" name="email" onchange="EmailValidate()" maxlength="50"></td>
</tr>
PHP:
file_put_contents($file, "\nEMAIL:", FILE_APPEND | LOCK_EX);
$ret = file_put_contents($file, $_POST['email'], FILE_APPEND | LOCK_EX);
以同样的方式,我试图从动态生成的 html 表中读取输入值,但出现错误,
HTML:
<table>
<tr>
<th>Number of Models:<title="Number of Models"></th>
<td><select id="numbermodels" name="numbermodels" onchange="buildTable(this.value); buildTable4(this.value);">
<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 >
<option value="6">6</option >
</select></td>
</tr>
<tr>
<th>Number of heads per model:</th>
<td>
<table id="contentTable" border="1" name="contentTable">
<!-- Fill table programmatically -->
</table></td>
</tr>
Javascript:
function buildTable(val)
{
var myTable =document.getElementById("contentTable");
var j=val;
var rows = [];
var cells = [];
while (myTable.hasChildNodes()) {
myTable.removeChild(myTable.lastChild);
}
for( var i = 0; i < 1; i++ )
{
rows[i] = myTable.insertRow(i);
if(i%3==2)rows[i].addClass("every3rdrow");
cells[i] = [];
for( var x = 0; x < j ; x++ )
{
cells[i][x] =document.createElement((x==0)?"th":"td");
cells[i][x].innerHTML = (x==0)?"<input id=t onchange=ty() name=t>":"<input id=t onchange=ty()>";
rows[rows.length - 1].appendChild(cells[i][x]);
}
}
}
buildTable();
function ty(){
$ad = document.getElementById("t").value;
if(!/^-?\d*$/.test($ad)) {
alert("Number of heads per model value must be numeric!");
}
}
为此,我也编写了类似的 PHP 代码,但我收到错误未定义索引 t, PHP:
file_put_contents($file, "\n Number of Heads per Model:", FILE_APPEND | LOCK_EX);
$ret = file_put_contents($file, $_POST['t'], FILE_APPEND | LOCK_EX);
这是什么原因,可以进行哪些修改才能成功从动态 html 表中读取输入值?
最佳答案
一些建议:
元素 ID 必须是唯一的。您不应为每个输入 ID 使用“t”。您可以将其更改为
id="t_$i_$x"
或类似的东西使其独一无二。您需要让服务器端脚本知道
t
是一个数组。要从提交的表单中获取所有值,请更改name=t
在<input>
元素模板至name="t[]"
.第 2 步将破坏您的验证功能。我会改变
onchange=ty()
至onchange="ty(this)"
。然后您必须更改您的ty()
函数实现为:function ty(el) { if(!/^-?\d*$/.test(el.value)) { alert("Number of heads per model value must be numeric!"); } }
因此,无需再次获取元素,从而简化了您的函数(当您在
onchange
事件中调用它时,只需传递它的一个实例即可)。这不一定是必需的,但最好始终将 HTML 标记属性值括在引号中,正如我在上面的建议中所示的那样。
关于javascript - 如何从动态html表中读取输入值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18970920/