Созданные JS элементы формы не отправляются - PullRequest
0 голосов
/ 03 августа 2011

У меня есть форма с «обычными» элементами формы, а также также элементы формы, которые создаются нажатием кнопки 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++;
  }
}

Edit: «Обычные» элементы формы находятся в другом теге div, чем созданные в JS. Может быть, это имеет значение?

Edit2: Полный (отредактированный, но уродливый) источник доступен здесь: http://pastebin.com/y5QJU4NN

1 Ответ

0 голосов
/ 03 августа 2011

Мне удалось скопировать ваш код и создать форму, которая была отправлена ​​без изменения.Однако на принимающей стороне после отправки формы я получил структуру 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 в вашем скрипте обработчика.


Edit

Похоже, PHP не понравилсяиспользование индексов массивов в качестве имен полей.Я уверен, что вы можете указать имя поля, например class[], и PHP будет захватывать все входящие поля с именем поля class[] в виде массива, но я не уверен, что вы можете указать имя поля, например class[1][name].Я изменил имена полей в вашем JS, чтобы они выглядели примерно так:

<input type=\"text\" name=\"class-" + (counter + 1) + "-name\" 
    id=\"class[" + (counter + 1) + "][name]\" class=\"text-fld\" />

И после отправки оно было вставлено в POST просто отлично.Попробуйте и посмотрите, работает ли он.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...