我正在尝试创建一个页面,用户可以根据需要向表中添加任意数量的行,然后将输入的值(表中每个单元格中有一个输入)传递回页面。
当试图使每个动态生成的输入框的名称不同时,我的问题出现了。我尝试创建一个变量来执行此操作,但我在其他地方使用的语法在创建新元素时似乎无效。
以下是相关代码:
if ($_POST['dept_1'] != null){ //If there was an input
$i = intval($_POST['num_of_rows']);
while ($i != 0){
$dept = $_POST['dept_' . $i];
$hours = $_POST['hours_' . $i];
echo $dept . " " . $hours . "\n";
$i--;
}
}
.....
var i = 2;
$("document").ready(function(){
$("#newrow").click(function(e){
$("#maintable").append('<tr> \
<td><input type="text" name="dept_" + i size="5" maxlength="5" /></td> \
<td><input type="text" name="hours_" + i size="5" maxlength="1" /></td> \
</tr>');
alert("dept_" + i);
e.preventDefault();
$("#hiddenvalue").attr("value", "" + i + "");
i = i + 1;
});
});
$ POST [&#39;部门&#39; 。 $ i]在$ i = 1时有效,因为dept_1被写入页面的HTML中。
alert(&#34; dept _&#34; + i)工作,将i的值连接到字符串。
名=&#34;部门_&#34; +我不工作。检查新元素,其名称为&#34; dept_ + i&#34;
为什么会发生这种情况,我该如何解决?
答案 0 :(得分:5)
不要让自己如此努力。 使用数组名称。
<td><input type="text" name="dept[]" size="5" maxlength="5" /></td>
<td><input type="text" name="hours[]" size="5" maxlength="1" /></td>
使用$ _POST ['dept']和$ _POST ['hours']获取PHP中的值,这将返回漂亮的干净数组。
答案 1 :(得分:3)
正确的解决方案是通过命名元素dept[]
来使用数组;这将在PHP端为您提供数组$_POST['dept']
。
除此之外,语法高亮显示已经向您显示问题:您的+i
在字符串内;请改用:
$("#maintable").append('<tr> \
<td><input type="text" name="dept_' + i + '" size="5" maxlength="5" /></td> \
<td><input type="text" name="hours_' + i + '" size="5" maxlength="1" /></td> \
</tr>');
答案 2 :(得分:0)
您需要在字符串中修复一些javascript语法错误,以便在适当的位置结束字符串,以便'string1' + i + 'string2'
:
var i = 2;
$("document").ready(function(){
$("#newrow").click(function(e){
$("#maintable").append('<tr> \
<td><input type="text" name="dept_' + i + '" size="5" maxlength="5" /></td> \
<td><input type="text" name="hours_' + i + '" size="5" maxlength="1" /></td> \
</tr>');
alert("dept_" + i);
e.preventDefault();
$("#hiddenvalue").attr("value", "" + i + "");
i = i + 1;
});
});