Html Атрибут имени в подмассивах - PullRequest
0 голосов
/ 19 апреля 2020

Я сейчас работаю над динамической c формой. У меня проблемы с именованием полей ввода. Вот моя форма: HTML Form

Вот код, который я пробовал Когда пользователь нажимает кнопку «Добавить код», ввод нового ввода и то же самое для родительской секции, клонируется вся форма, я хочу дать имена входам, чтобы я мог получить эффективный массив, в результате чего PHP сохранится в базе данных.

HTML:

<div class="row">
  <div class="col-6">
    <div class="form-group">
      <label for="">Product(s) Range Manufactured</label>
      <input type="text" name="members_unit[exports_range_manf][]" id="" class="form-control" placeholder="Product(s) Range Manufactured">
    </div>
  </div>
</div>

<div class="row">
  <div class="col-12">
    <h4>HS Codes of Products</h4>
  </div>
</div>
<div class="row main-parent-header">
  <div class="col-3 clone-child">
    <div class="form-group mr-top-10">
      <input type="text" name="members_unit[0][hs_code][]" id="" class="form-control w-full members_hs_code" placeholder="HS Codes of Products">
    </div>
    <span class="pull-right">
      <button type="button" class="btn btn-success btn-add"><i class="fa fa-plus" aria-hidden="true"></i></button>
      &nbsp
      <button type="button" class="btn btn-danger btn-remove"><i class="fa fa-minus"
          aria-hidden="true"></i></button>
    </span>
  </div>
</div>

JS:

var count = 0;
$(document).on('click', '.btn-add', function () {
  var parents = $(this).closest('.main-parent-header');
  var old_element = $(this).closest('.clone-child');
  var new_element = old_element.clone()
  if (new_element.hasClass('unit-informations')) {
    var count = parents.find('.members_hs_code').length++
    var l = new_element.find('.members_hs_code')
    if (l.length > 1) {
      l.closest('.clone-child').not(':first-child').remove()
    }
    l.attr('name', 'members_unit[' + count + '][hs_code][]')
  }
  parents.append($(new_element).insertAfter(old_element))
})

$(document).on('click', '.btn-remove', function (e) {
  e.preventDefault()
  var parents = $(this).closest('.main-parent-header');
  var old_element = parents.find('.clone-child');

  if (old_element.hasClass('unit-informations')) {

    var units = parents.find('.unit-informations')
    if (units.length != 1) {
      $(this).closest('.clone-child').remove();

      var units = parents.find('.unit-informations')
      units.each(function(index,ele){
        $('.unit-informations:nth-child('+index+')').find('.members_hs_code').each(function(e,sub_ele){
          $('.unit-informations:nth-child('+index+')').find('.members_hs_code:nth-child('+e+')').attr('name','members_unit['+index+'][hs_code][]')
        })
        })

    }

  } else {
    if (old_element.length == 1) {
      $(this).css('disabled', true)
    } else {
      $(this).closest('.clone-child').remove();
    }
  }

})

Как я присваиваю имена полям ввода, чтобы получить такой результат в php:

     0 => array:3 [
    "exports_price" => 1
    "exports_unit" => 4
    "hs_codes" => array:3 [
      0 => "3713"
      1 => "471238"
      2 => "1237"
    ]
  ]
  1 => array:3 [
    "exports_price" => 1
    "exports_unit" => 4
    "hs_codes" => array:2 [
      0 => "3713"
      1 => "471238"
    ]
  ]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...