Динамически добавленные формы массива JQuery в PHP (CodeIgniter) и обратно (с ошибками)

У меня есть форма, поля которой динамически добавляются как таковые:

function addFieldRow() {
  $('.form-container').append('
    <div><input type="text" name="name[1]"></div>
    <div>
      <select name="choice[1]">
        <option value="red">red</option>
        // . . .
      </select>
    </div>
     // . . .
  ');
}

Затем я передаю их соответствующему контроллеру CodeIgniter с объявленными правилами массива form_validation:

$this->form_validation->set_rules('name[]', 'text field', 'required');
// . . . other fields' rules

Проблема в том, что если какая-либо из динамически добавляемых форм имеет ошибку, она исчезает во время загрузки представления. Я хочу знать, как я могу сохранить динамически добавляемые поля формы после выполнения проверки с ошибками:

if ($this->form_validation->run() == FALSE) {
  // do stuff to preserve the dynamically created fields to show their errors
  $this->load->view('user_addresses_view');
}

Лучшее решение

Я нашел решение сохранить эти динамически добавленные элементы, используя ajax для подключения к соответствующему контроллеру формы в среде CodeIgniter. Этот метод может:

  1. Выполняйте проверку на стороне клиента и на стороне сервера без обновления страницы.
  2. Поскольку страница не обновляется, все эти динамически добавляемые элементы формы никуда не денутся!

Решение от james246


person Community    schedule 25.01.2013    source источник


Ответы (2)


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

Использование SESSION может быть плохой идеей, потому что для этого вам придется кодировать более сложные помощники и методы проверки и т. д.

Другое возможное решение

  1. используйте плагин jQuery.validate, который позволяет нам проверять динамически добавляемые строки (fields, dom).

  2. воспользуйтесь преимуществами mysql и добавьте эти поля в базу данных с возможной ошибкой, хранящейся в базе данных, и отправьте ее для просмотра файла.

person Dipesh Parmar    schedule 25.01.2013
comment
Сэр, спасибо за объяснение и предложение альтернатив! Сейчас попробую jQUery.validate! - person ; 25.01.2013

С учетом :

 for($i=0; $i<$ttl_input;$i++)
    {
    <div><input type="text" name="name[".$i."]"></div>
    <?php echo form_error('name['.$i.']'); ?>
    }

в контроллере:

foreach($this->input->post('name') as $index=>$name)
{
$this->form_validation->set_rules('name['.$index.']', 'text field', 'required');
}
person Koushik Sen    schedule 20.08.2016