Laravel, не может установить старое значение для начальной загрузки datetimepicker при проверке

#laravel #datetimepicker

Вопрос:

Я использую Laravel 8.5 (текущая версия)

Поэтому я новичок в laravel, я пытаюсь учиться на простых примерах.

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

              <div class="form-group">
                <input type="hidden" id="hdnLocale" value="ru">
                <input type="hidden" name="hdndefDate" id="hdndefDate" value="2021-01-17">
                @if (old('hdndefDate'))
                <input type="hidden" name="hdndefDate" value="{{ old('hdndefDate') }}">
                @endif
                <label for="picker">Birthday</label>
                <div class="input-group">
                    <div class="input-group-prepend">
                        <button type="button" class="input-group-text" id="toggle">
                            <i class="fa fa-calendar-alt"></i>
                        </button>
                    </div>
                    <input type="text" id="picker" name="picker" value="{{old('picker')}}" class="form-control" readonly>
                </div>
            </div>
 

Как вы видите, я использую два скрытых входа со значением переменной от контроллера, которое должно быть задано с помощью JavaScript (в простом я использую точное значение).

Вот мой сценарий:

  <script>
        var locale = $('#hdnLocale').val()
        jQuery.datetimepicker.setLocale(locale)
        jQuery.datetimepicker.setDateFormatter('moment')

        var yourDate = $('#hdndefDate').val();
        $('#picker').val(yourDate);
        $('#picker').datetimepicker({
            timepicker: false,
            datepicker: true,
            format: 'YYYY-MM-DD',
            defaultDate: yourDate,
            weeks: false,
            hours12: false,
            step: 15,
            yearStart: 2015,
            yearEnd: 2022,
            dayOfWeekStart: 1
        });

        $('#toggle').on('click', function () {
            $('#picker').datetimepicker('toggle');
        })

</script>
 

У меня также есть некоторые другие входы, которые я проверяю с помощью контроллера,
когда я изменяю значение datepicker, форма записи и проверка не выполняются, в других полях задаются старые значения, кроме datepicker.
Где я что-то напутал? Я хочу установить старое значение в datepicker, когда проверка завершится неудачей.
Как я обнаружил позже, старое значение установлено и немедленно обновляется значением по умолчанию «2021-01-17».

Ответ №1:

Похоже, вы получаете два входа с именем hdndefDate, когда существуют старые значения из этого входа.

И в вашем JS вы получаете значение из входного #hdndefDate, которое содержит значение по умолчанию.

Измените свой @if на что-то вроде этого:

 
                @if (old('hdndefDate'))
                    <input type="hidden" name="hdndefDate" id="hdndefDate" value="{{ old('hdndefDate') }}">
                @else
                    <input type="hidden" name="hdndefDate" id="hdndefDate" value="2021-01-17">
                @endif
 

Или даже лучше:

 <input type="hidden" name="hdndefDate" id="hdndefDate" value="{{ old('hdndefDate') ??  2021-01-17}}">