Поля формы, добавленные через javascript, не передают данные

Не нашел такого вопроса, у меня есть форма с одним набором полей и добавление дополнительных, если пользователь нажимает кнопку. Я делаю эти поля такими же, как в первом наборе, и использую name='array[]' для всех наборов полей.

В любом случае, когда я отправляю форму с полями, сгенерированными javascript, вместе с исходными полями, передаются только значения в исходном наборе полей.

Это в codeigniter.

Я не могу передать весь код, но в pastebin есть сгенерированный html, и я вставлю биты php/javascript, относящиеся к этой проблеме.

<tr id = "add_dependents">
    <td class = "tim-dependents-table-cell">
        <?php $data = array('class' => 'tim-dependents-table-contents', 'name' => 'dependent_names[]', 'id' => 'dependent_names_1', 'value' => $dep_names[0]);
        echo form_input($data);
        ?>
    </td>

    <td>
        <?php $data = array('class' => 'tim-dependents-table-contents', 'name' => 'dependent_ssns[]', 'id' => 'dependent_ssns_1', 'value' => $dep_ssns[0]);
        echo form_input($data);
        ?>
    </td>

    <td>
        <?php $data = array('class' => 'tim-dependents-table-contents', 'type' => 'date', 'name' => 'dependent_dobs[]', 'id' => 'dependent_dobs_1', 'value' => $dep_dobs[0]);
        echo form_input($data);
        ?>
    </td>
    <td>
        <a href = "#" class = "red"><i class = "fa fa-trash"></i></a>
    </td>
</tr>

Затем я создаю дополнительные поля, если пользователь нажимает кнопку, с помощью этой функции:

if (typeof count === 'undefined') {
        var count = 2;
    }

    function insertDependent() {
        $("#add_dependents").after("<tr id='dependents_row_" + count + "'>" +
            "<td><input type='text' id='dependent_names_" + count + "' name='dependent_names[]' /></td>" +
            "<td><input type='text' id='dependent_ssns_" + count + "' name='dependent_ssns[]'/></td>" +
            "<td><input type='date' id='dependent_dobs_" + count + "' name='dependent_dobs[]'/></td>" +
            "<td><a href='#' onclick='deleteRow(" + count + ")' class='red'><i class='fa fa-trash'></i></a></td>" +
            "</tr>");
        count++;
    }

Эта часть работает и создает поля, которые выглядят так, как должны.

Затем код в контроллере, который принимает эти поля, в частности. Не делитесь всем кодом, который работает, только часть, которая не работает:

if (!empty($this->input->post('dependent_names'))) {
                $data['dependent_names'] = $this->input->post('dependent_names');
                $data['dependent_ssns'] = $this->input->post('dependent_ssns');
                $data['dependent_dobs'] = $this->input->post('dependent_dobs');
            }

Однако проблема находится на странице до того, как она попадет в контроллер. Полезная нагрузка от отправки страницы включает в себя «постоянный» набор полей, но не какие-либо данные в полях, сгенерированных javascript.

Что должно произойти, так это то, что поля, созданные с помощью javascript, должны быть представлены с данными, такими же, как «постоянный» набор полей.

Как подается форма?

Patrick Q 24.04.2019 22:31

Он отправляется через форму action = "controller/method" method = "post". Я тестировал форму много раз, она работает, делает то, что должна. Только эта часть не работает.

techcyclist 24.04.2019 22:33

Я не уверен, что это причина проблемы, но идентификаторы элементов должны быть уникальными. Вы каждый раз создаете поля формы с одним и тем же идентификатором.

Patrick Q 24.04.2019 22:34

Да, верно. У меня они тоже генерировали разные, и это не сработало, поэтому я изменил их на одинаковые. Я вернусь к уникальным и посмотрю, изменится ли что-нибудь,

techcyclist 24.04.2019 22:35

Да, следуя вышеизложенному, я просто изменил их обратно, где каждый идентификатор уникален, например, depend_names_1, depend_names_2 и т. д. Я оставлю это так, если это более правильно, но все равно не работает.

techcyclist 24.04.2019 22:39

«поля, созданные с помощью javascript, не передают данные». Как вы это подтверждаете? Вы просматриваете опубликованные данные в сетевом инспекторе вашего браузера?

Patrick Q 24.04.2019 22:41

что я делаю, так это отправляю форму без некоторых необходимых данных, поэтому она отправляет обратно на страницу с данными. затем сбросить эту переменную на страницу. может быть немного неуклюжим, но это работает (обычно). Есть ли способ лучше?

techcyclist 24.04.2019 22:42

Я предлагаю сделать то, что я сказал. Просмотр полезной нагрузки поста. Это скажет вам, действительно ли эти поля опубликованы. Если да, то проблема не в форме, а в том, что вы делаете с данными на сервере.

Patrick Q 24.04.2019 22:45

Получил это, используя инструменты разработчика Chrome, нашел заголовки. Показывает первый набор полей, но не данные в полях, сгенерированных с помощью javascript.

techcyclist 24.04.2019 22:53

Вы уверены, что добавленные элементы включены в форму? Я имею в виду, помещенный между <form>...</form>

CharlesEF 24.04.2019 22:55

Да, они включены между тегами формы.

techcyclist 24.04.2019 22:57

Почему у вас несколько циклов, а не просто $dependent_names = $this->input->post('dependent_names') ???

miken32 24.04.2019 23:00

Если браузер не отправляет значения этих элементов, они не находятся в форме, как сказал @CharlesEF, или вы выполняете какую-то отправку формы JS, которая не учитывает все элементы формы.

miken32 24.04.2019 23:03

Вы правы, в данном случае это работает. Я не помню, почему я так поступил. Я изменю это выше. Спасибо

techcyclist 24.04.2019 23:05

Но это не решает проблему выше.

techcyclist 24.04.2019 23:16

Это отправка php, действие и переход к контроллеру/методу. И да, поля находятся внутри тегов формы.

techcyclist 24.04.2019 23:17

Как ни странно, когда я просматриваю исходный код, закрывающий тег формы находится в нужном месте. Когда я использую раздел «Элементы» chrome dev tools, он показывает, что он закрывается близко к верхней части формы. Для меня это не имеет смысла, и, как я уже сказал, форма работает, а вот эти добавленные поля — нет.

techcyclist 24.04.2019 23:37

Над добавленными полями и под добавленными полями есть поля, которые работают правильно.

techcyclist 24.04.2019 23:41

похоже, вы пропустили большую часть кода, и я понимаю, почему. однако у меня есть ощущение, что ваша проблема находится в этих опущенных разделах. если бы вы могли упростить код, удаляя зависимости .etc. и опубликуйте полный html-код на pastebin или на том, что у вас есть (достаточно для запуска в наших системах), чтобы мы могли диагностировать проблему. иначе это просто игра в догадки.

Alex 25.04.2019 02:52

ОК, я создал pastebin со сгенерированным исходным кодом страницы. pastebin.com/a5PeN73s . Надеюсь, это поможет.

techcyclist 25.04.2019 21:33
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
20
85
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ну, я понял это. У меня был тег открывающей формы, вложенный таким образом, что некоторые элементы div открывались перед ним и закрывались после него.

Другими словами, у меня было это:

<div>

    <form action = "" etc>

</div>

    </form>

Я переместил тег формы выше на странице, например:

<form action = "" etc>

    <div>

    </div>

</form>

Забавно, что все заработало, кроме полей javascript. Я собираюсь удалить PHP и codeigniter, так как это прямая проблема с javascript, и я надеюсь, что какой-нибудь эксперт сможет объяснить.

Рад, что теперь это работает, но я до сих пор не знаю более глубокого «почему».

Спасибо комментаторам, которые пытались помочь.

Другие вопросы по теме