我有一个表单,带有“常规”表单元素,然后还会形成通过单击javascript按钮创建的元素。以下是它的名称:
<script src="incld/addClass.js" language="Javascript" type="text/javascript">
</script>
<input type="button" value="Add a Class" onClick="addInput('dynamicInput');" class="add-class-btn">
但是,当我查看$ _POST输出时,这些元素尚未提交。
这是JS:
var counter = 1;
var limit = 25;
function addInput(divName){
if (counter == limit) {
alert("You have reached the limit of adding " + counter + " inputs");
} else {
var newdiv = document.createElement('div');
newdiv.innerHTML = "Class " + (counter + 1) + " <p><label for=\"class_name\">Class Name </label><input type=\"text\" name=\"class[" + (counter + 1) + "][name]\" id=\"class[" + (counter + 1) + "][name]\" class=\"text-fld\" /></p><p><label for=\"class_grade_level\">Grade Level </label><input type=\"text\" name=\"class[" + (counter + 1) + "][grade_level]\" id=\"class[" + (counter + 1) + "][grade_level]\" class=\"text-fld\" /></p><p><label for=\"class_subject\">Subject </label><input type=\"text\" name=\"class[" + (counter + 1) + "][subject]\" id=\"class[" + (counter + 1) + "][subject]\" class=\"text-fld\" /></p>";
document.getElementById(divName).appendChild(newdiv);
counter++;
}
}
编辑: “常规”表单元素与JS创建的表单元素不同。也许这很重要?
Edit2:此处提供完整(已编辑但难看)的来源:http://pastebin.com/y5QJU4NN
答案 0 :(得分:0)
我能够复制您的代码并创建一个无需更改即可提交的表单。但是,在提交表单后的接收方,我结束了类似于此的POST
结构:
<?php
var_dump($_POST);
?>
array(1) {
["class"]=> array(1) {
[2]=> array(3) {
["name"]=> string(5) "test1"
["grade_level"]=> string(5) "test2"
["subject"]=> string(5) "test3"
}
}
}
所以看起来你上面发布的代码有效。检查以确保您正在检查处理程序脚本中POST
中的正确数组级别。
修改强>
看起来PHP并不喜欢你使用数组索引作为字段名称。我确信您可以指定一个字段名称,例如class[]
,PHP将捕获字段名称为class[]
的所有传入字段作为数组,但我不确定您是否可以指定字段名称class[1][name]
1}}。我将JS中的字段名称更改为:
<input type=\"text\" name=\"class-" + (counter + 1) + "-name\"
id=\"class[" + (counter + 1) + "][name]\" class=\"text-fld\" />
提交后,它被插入POST就好了。试试看,看看它是否有效。