首页 > 解决方案 > Laravel 7 - 验证失败时无法检索动态选择的旧值

问题描述

该表单有一个针对客户的选择,其中填充来自控制器中的变量。我可以使用 old('customer_id') 轻松检索旧输入值。

我的问题来自第二个选择。第二个选择使用 javascript 根据选择的客户填充客户联系人。当验证失败时,我失去了那个价值。

这是 store 方法的控制器代码:

        $rules = [
        'number' => 'required',
        'customer_id' => 'required',
        'contact_id' => 'required',
        'payment_type' => 'nullable',
        'department_id' => 'required',
        'requested_ship_date' => 'required|after:yesterday',
    ];

    $customMessages = [
        'number.required' => 'The Sales Order number is required.',
        'customer_id.required' => 'Please choose a customer.',
        'contact_id.required' => 'Please choose a contact.',
        'requested_ship_date.required' => 'You must enter a ship date.',
        'requested_ship_date.yesterday' => 'The requested ship date must be today or after.',
        'department_id.required' => 'Please choose a department.'
    ];

    $salesorder = \request()->validate($rules, $customMessages);

    SalesOrder::create($salesorder);

    return redirect('/salesorders');

这是客户选择:

<select
                            name="customer_id"
                            class="shadow text-sm">
                            @if (old('customer_id'))
                                <option
                                    value>

                                </option>
                            @else
                                <option
                                    selected
                                    value>

                                </option>
                            @endif

                            @foreach($customers as $customer)
                                @if (old('customer_id'))
                                    <option
                                        value="{{ $customer->id }}" {{ old('customer_id') == $customer->id ? 'selected' : '' }}>
                                        {{ ucfirst($customer->name) }}
                                    </option>
                                @else
                                    <option
                                        value="{{ $customer->id }}">
                                        {{ ucfirst($customer->name) }}
                                    </option>
                                @endif
                            @endforeach
                        </select>

这是客户联系人的选择:

<select
                            name="contact_id"
                            class="shadow text-sm text-center"
                        >

                            <option>

                            </option>

                        </select>

这是javascript:

$('select[name="customer_id"]').on('change', function () {

    var customerId = $(this).val();

    if (customerId) {
        $.ajax({
            url: '/customer/contacts/get/' + customerId,
            type: "GET",
            dataType: "json",
            beforeSend: function () {
                $('#loader').css("visibility", "visible");
            },

            success: function (data) {

                $('input[name="email"]').val('');

                $('select[name="contact_id"]').empty();

                $('select[name="contact_id"]').append('<option value="Choose">Choose Contact</option>');

                $.each(data, function (key, value) {

                    $('select[name="contact_id"]').append('<option value="' + key + '">' + value + '</option>');

                });
            },
            complete: function () {
                $('#loader').css("visibility", "hidden");
            }
        });
    } else {
        $('select[name="customer_id"]').empty();
    }

});

标签: javascriptphplaravel

解决方案


推荐阅读