Добавление элементов формы с помощью javascript до и после проверки в Laravel

У меня есть форма регистрации клиента, в ней есть кнопка для добавления дополнительных полей номера телефона. После отправки формы и проверки ввода на странице необходимо воссоздать те же формы со старыми вводами. Я сделал следующее решение, я хотел бы знать, является ли это эффективным способом, а также не могу ли я создать пустые строки, поскольку в настоящее время он воссоздает все поля, даже если они были пустыми. html

<h3>{{__('Phone Numbers')}} <button type = "button" id = "addPersonPhone">+</button></h3>
<input type = "hidden" name = "personPhoneLines" id = "personPhoneLines" value = "{{(old('personPhoneLines')? old('personPhoneLines') : 1)}}">
<div id = "personPhone">
    <div class = "form-group row">
        <div class = " col-2">
            <label class = "col-form-label col-form-label-sm" for = "personPhoneType-1">{{__('Type')}}</label>
            <select class = "custom-select form-control-sm" id = "personPhoneType-1" name = "personPhoneType-1">
                <option selected value=''>{{__('Choose')}}...</option>
                @foreach ($phonetypes as $phonetype)
                <option value = "{{$phonetype->id}}" {{(old( 'personPhoneType-1')==$ phonetype->id)? "selected":""}}>{{$phonetype->name}}</option>
                @endforeach
            </select>
        </div>
        <div class = "col-3">
            <label class = "col-form-label col-form-label-sm" for = "personCountryCode-1">{{__('Country')}}</label>
            <select class = "custom-select form-control-sm" id = "personCountryCode-1" name = "personCountryCode-1">
                <option selected value = "">{{__('Choose')}}...</option>
                @foreach ($countries as $country)
                <option value = "{{$country->id}}" {{(old( 'personCountryCode-1')==$ country->id)? "selected":""}}>{{$country->name.' (+'.$country->dialing_code.')'}}</option>
                @endforeach
            </select>
        </div>
        <div class = "col-4">
            <label class = "col-form-label col-form-label-sm" for = "personPhoneNo-1">{{__('Number')}}</label>
            <div class = "input-group mb-2">
                <input type = "text" class = "form-control form-control-sm" placeholder = "{{__('Number')}}" name = "personPhoneNo-1" id = "personPhoneNo-1" value = "{{old('personPhoneNo-1')}}">
            </div>
        </div>
    </div>

javascript

var phoneLines = parseInt($("#personPhoneLines").val(), 10);

var phoneRow = $('#personPhone').html();
var oldPersonPhones =["{{old('personPhoneNo-1')}}", "{{old('personPhoneNo-2')}}",
"{{old('personPhoneNo-3')}}", "{{old('personPhoneNo-4')}}", "{{old('personPhoneNo-5')}}"];

for (i = 2; i <= phoneLines; i++) {
    newLine = phoneRow.split('personPhoneType-1').join('personPhoneType-' + i);
    newLine = newLine.split('personCountryCode-1').join('personCountryCode-' + i);
    newLine = newLine.split('personPhoneNo-1').join('personPhoneNo-' + i);

    $("#personPhone").append(newLine);
    $("#personPhoneNo-" + i).val(oldPersonPhones[i-1]);

    }


 $('#addPersonPhone').click(function(){
    if (phoneLines >=5) {
        alert('You cannot add more than 5 lines')
    } else {
        phoneLines = phoneLines + 1;
        newLine = phoneRow.split('personPhoneType-1').join('personPhoneType-'+phoneLines);
        newLine = newLine.split('personCountryCode-1').join('personCountryCode-'+phoneLines);
        newLine = newLine.split('personPhoneNo-1').join('personPhoneNo-'+phoneLines);

    $("#personPhone").append(newLine);
    $("#personPhoneLines").val(phoneLines);

}

});

Поведение ключевого слова "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) для оценки ваших знаний,...
0
0
32
1

Ответы 1

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

<select name = "people[phone_type][]"></select>
<select name = "people[phone_country_code][]"></select>
<input type = "text" name = "people[phone_number][]">

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

Затем при проверке вы можете обратиться к документации для своих полей: https://laravel.com/docs/5.6/validation#validating-arrays

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

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