JS创建的表单元素未提交

时间:2011-08-03 17:37:10

标签: php javascript css forms

我有一个表单,带有“常规”表单元素,然后还会形成通过单击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

1 个答案:

答案 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就好了。试试看,看看它是否有效。