Извлечение нескольких jQuery, добавляющих данные в JSON

#javascript #jquery #json #forms #append

#javascript #jquery #json #формы #добавить

Вопрос:

У меня есть входные данные, которые добавляются jQuery при нажатии кнопки «Добавить другую учетную запись». Поскольку все они имеют одно и то же имя, в JSON извлекается только один результат, который является последним результатом «3123213».

Я пытаюсь получить все результаты из поля ввода в JSON, например: accountsToLink»:[ «3453453453», «3543453453», «5345345345» ] , но не смог найти способ сделать это с помощью jQuery append.

Пожалуйста, помогите!

 <div class="input-group mb-3 input_fields_wrap">
<input type="text" class="form-control mx-auto" id="inputAccountNumber" name="accountsToLink" placeholder="9102031012" maxlength="10" required>
<div class="input-group-append">
<button class="btn btn-outline-danger" type="button"><strong>x</strong></button>
</div>
</div>
<div class="text-center mt-4">
<button class="btn-outlined add_field_button">Add another account</button>
</div>

<script>
$(document).ready(function() {
var max_fields      = 10; //maximum input boxes allowed
var wrapper         = $(".input_fields_wrap"); //Fields wrapper
var add_button      = $(".add_field_button"); //Add button ID

var x = 1; //initlal text box count
    $(add_button).click(function(e){ //on add input button click
        e.preventDefault();
        if(x < max_fields){ //max input box allowed
            x  ; //text box increment
            $(wrapper).append('<div class="input-group mt-3 additional-acc-number"><input type="text" class="form-control mx-auto" name="accountsToLink" placeholder="9102031012" maxlength="10"><div class="input-group-append"><button class="btn btn-outline-danger remove_field" type="button"><strong>x</strong></button></div></div>'); //add input box
        }
    });
    
    $(wrapper).on("click",".remove_field", function(e){ //user click on remove text
        e.preventDefault(); 
        $(this).parent('div').parent('div').remove(); x--;
    });
</script>
  

jquery - добавление входных данных

Комментарии:

1. Как генерируется ваш json? Используете ли вы ajax? Пожалуйста, уточните подробнее и добавьте соответствующий код.

2. Привет, я использую именно этот метод из simonplend.com /… . Извините, что я не уверен, какой метод вызывается.

Ответ №1:

Вы можете использовать .each для перебора ваших входных данных, которые генерируются динамически, а затем добавлять их значение внутри JSON Array , используя .push($(this).val()) where $(this).val() — значение поля ввода.

Демонстрационный код :

 $(document).ready(function() {

  var max_fields = 10; //maximum input boxes allowed
  var wrapper = $(".input_fields_wrap"); //Fields wrapper
  var add_button = $(".add_field_button"); //Add button ID
  var x = 1; //initlal text box count

  $(add_button).click(function(e) { //on add input button click

    e.preventDefault();

    if (x < max_fields) { //max input box allowed

      x  ; //text box increment
      //added inputs class inside div
      $(wrapper).append('<div class="input-group mt-3  inputs additional-acc-number"><input type="text" class="form-control mx-auto" name="accountsToLink" placeholder="9102031012" maxlength="10"><div class="input-group-append"><button class="btn btn-outline-danger remove_field" type="button"><strong>x</strong></button></div></div>'); //add input box

    }

  });



  $(wrapper).on("click", ".remove_field", function(e) { //user click on remove text

    e.preventDefault();

    $(this).parent('div').parent('div').remove();

    x--;

  });



  $("#sendme").click(function() {
    var acc_main = {} //create object
    acc_main["accountsToLink"] = new Array //create array
    $(".inputs > input[name=accountsToLink] ").each(function() {
      acc_main["accountsToLink"].push($(this).val()) //push value in array
    })
    console.log(JSON.stringify(acc_main))
    //your ajax call here /...

  })

})  
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<!--added inputs class-->
<div class="input-group mb-3 inputs input_fields_wrap">

  <input type="text" class="form-control mx-auto" id="inputAccountNumber" name="accountsToLink" placeholder="9102031012" maxlength="10" required>

  <div class="input-group-append">

    <button class="btn btn-outline-danger" type="button"><strong>x</strong></button>

  </div>

</div>

<div class="text-center mt-4">

  <button class="btn-outlined add_field_button">Add another account</button>

</div>

<button id="sendme">SEnd me</button>  

Обновление 1 :

Поскольку вам нужно объединить этот json с formData , вам просто нужно внести изменения здесь :

 async function postFormDataAsJson({ url, formData }) {
    const plainFormData = Object.fromEntries(formData.entries());
    plainFormData["accountsToLink"] = new Array //create array
    $("input[name=accountsToLink] ").each(function() {
      plainFormData["accountsToLink"].push($(this).val()) //push value in array
    })
    console.log(plainFormData)
    //everthing same..
}
  

Комментарии:

1. Спасибо! Ваш ответ не сработал сразу, но изменение вашего $(«.inputs > input[name=accountsToLink] «) на $ ( «input [name = accountsToLink]» ) делает свое дело. Могу ли я спросить, как вы обычно отправляете их в JSON, чтобы я мог видеть результаты JSON в сети> Заголовки?

2. simonplend.com/… Это метод, который я использую для получения запроса post формы, но это добавленное поле ввода кажется отделенным от формы, поэтому я не очень уверен, как «объединить» их вместе.

3. Обновленный мой ответ посмотрите. Вам просто нужно использовать plainFormData и добавить create new key, используя его, и вставить значение в то же самое. Дайте мне знать, если это не сработает.

4. Этот код по-прежнему размещается в том же месте, заменяя $(«#sendme»).click(function() { ?

5. Спасибо за скрипку! Я помещал const formDataJsonString = JSON.stringify(plainFormData); в неправильном месте! Теперь это работает, БОЛЬШОЕ СПАСИБО, Свати, ты действительно сэкономил много моего времени.