Как изменить имя input в многомерном массиве формы при помощи jQuery?

412
26 мая 2017, 14:22

Есть форма:

<form method="post" enctype="multipart/form-data" id="myform" class="myform">
    <div class="person-list">
       <div class="row person-item" id="original-person-item">
        <div class="col-md-3">
          <div class="form-group control-wrap">
            <input type="text" name="actorsOther[0][name]" class="form-control" placeholder="Имя на русском" maxlength="200" max="200">
          </div>
        </div>
        <div class="col-md-3">
          <div class="form-group control-wrap">
            <input type="text" name="actorsOther[0][nameEng]" class="form-control" placeholder="Имя на английском" maxlength="200" max="200">
          </div>
        </div>
        <div class="col-md-3">
          <div class="form-group control-wrap">
            <input type="text" name="actorsOther[0][nameOrig]" class="form-control" placeholder="Имя на родном" maxlength="200" max="200">
          </div>
        </div>
        <div class="col-md-3">
          <div class="form-group control-wrap">
            <select class="selectpicker form-control" name="actorsOther[0][profession][]" data-live-search="true" multiple>
                <option value="1">один</option>
                <option value="2">два</option>
            </select>
          </div>
        </div>
      </div>
    </div>
    <button type="button" id="addPerson" class="btn btn-danger">Добавить поле</button>
  <p><button type="submit" class="btn btn-danger" id="submit" onclick="sendform();">Сохранить</button>
</form>
<script>
function sendform(){
  $('#submit').prop('disabled', true);
  $('#progress').css('display','block');
  var formData = new FormData(document.forms.myform);
  $.ajax({
    type: "POST",
    processData: false,
    contentType: false,
    url: "../ajax.php?add",
    data:  formData,
    success:function(data){
      $("#messInfo").html(data);
      $('#submit').prop('disabled', false);
      $('#progress').css('display','none');
    },
    error:function(data){
      alert('error');
      $('#submit').prop('disabled', false);
      $('#progress').css('display','none');
    } 
  })
}
  $('#addPerson').click(function() {
    var newVideoItem = $('#original-person-item').clone();
    newVideoItem.find('.control-wrap').each(function(index) {
    var newSelectpicker = $(this).find(".selectpicker");
      if (newSelectpicker.length) {
        $(this).html(newSelectpicker) 
      newSelectpicker.selectpicker();
      }
    });
    newVideoItem.appendTo(".person-list");
  });
</script>

Кнопка добавляет новые поля. Но есть проблема с массивом для получения данных с формы. Подскажите пожалуйста, как изменить имена полей формы: [0], [1], [2]... при их добавлении (нажатии на кнопку id="addPerson"). Чтобы при добавлении нового поля было не:

actorsOther[0][name]
actorsOther[0][nameEng]
actorsOther[0][nameOrig]
actorsOther[0][profession][]

а уже:

actorsOther[1][name]
actorsOther[1][nameEng]
actorsOther[1][nameOrig]
actorsOther[1][profession][]
actorsOther[2][name]
actorsOther[2][nameEng]
actorsOther[2][nameOrig]
actorsOther[2][profession][]

и т.д.

Answer 1

как-то так ?

var count = 0;
$('#submit').prop('disabled', true);
$('#progress').css('display','block');
var formData = new FormData(document.forms.myform);

$('#addPerson').click(function() {
  var newVideoItem = $('#original-person-item').clone();
  count++;
  newVideoItem.find("[name='actorsOther[0][name]']").attr('name', 'actorsOther['+count+'][name]');
  newVideoItem.find("[name='actorsOther[0][nameEng]']").attr('name', 'actorsOther['+count+'][nameEng]');
  newVideoItem.find("[name='actorsOther[0][nameOrig]']").attr('name', 'actorsOther['+count+'][nameOrig]');
  newVideoItem.find("[name='actorsOther[0][profession][]']").attr('name', 'actorsOther['+count+'][profession]');
  newVideoItem.find('.control-wrap').each(function(index) {
  var newSelectpicker = $(this).find(".selectpicker");
    if (newSelectpicker.length) {
      $(this).html(newSelectpicker) 
      //newSelectpicker.selectpicker();
    }
  });
  newVideoItem.appendTo(".person-list");
});
READ ALSO
Node.js кириллица

Node.js кириллица

Изучаю Nodejs По учебнику предложили сделать простой консольный переводчик

455
ios, изменение css при повороте экрана

ios, изменение css при повороте экрана

Всем добрый день, при загрузке страницы $(window)load и изменении размера окна браузера $(window)

296
Не получается передать массив данных (из базы данных) методом ajax

Не получается передать массив данных (из базы данных) методом ajax

В require_once "blocks/headphp" находится подключение jquery + функция connect():

277
Становление стилей с помощью скриптов

Становление стилей с помощью скриптов

Хочу сделать сайт для своей школыУ нас там компьютеры древние, как и браузера на них

343