Выбранный параметр на select2 с помощью Ajax Автозаполнение - PullRequest
0 голосов
/ 27 апреля 2020

Я пытаюсь выбрать значение в поле выбора, используя Select2 и Ajax автозаполнение с Laravel и Blade. У меня проблема только в режиме редактирования (когда у меня уже есть значение в БД), и он работает без проблем в режиме вставки. Вот мой html код, где выбор пуст:

<select class="form-control" id="city-name" name="city" style="width: 100%">
    {{ isset($indirizzi->city_id) ? "<option value=\"". $indirizzi->city->id ."\" selected>".$indirizzi->city->name."</option>" : "" }}
</select>

Вот мой javascript код, где я получаю значение из БД и создаю новое значение параметра:

<script>
    var CSRF_TOKEN = $('meta[name="csrf-token"]').attr('content');

    @if(isset($indirizzi))
        var newOption = new Option('{{ $indirizzi->city->name }}', '{{ $indirizzi->city->id }}', true, true);
        var txtOption = '<option value="{{ $indirizzi->city->id }}" selected>{{ $indirizzi->city->name }}</option>';
        $('#city-name').append(txtOption).val('{{ $indirizzi->city->id }}');
        $('#city-name').select2().trigger('change');
    @endif

    $().ready(function () {
        $("#city-name").select2({
            ajax: {
                url: "{{ route("ajaxFindCity") }}",
                dataType: 'json',
                delay: 250,
                type: "POST",
                data: function (params) {
                    return {
                        _token: CSRF_TOKEN,
                        city: params.term
                    };
                },
                processResults: function (data) {
                    return {
                        results: data
                    };
                },
                error: function (data) {
                    showException(data);
                },
                cache: true
            },
            minimumInputLength: 3,
            templateSelection: function (data) {
                return data.city;
            }
        });
    });
</script>

Но при загрузке страницы я вижу выбранное значение в моем окне выбора, но не работает поиск нового значения ...

Это код функции в маршрут ("ajaxFindCity"), который работает, если я Я не в режиме редактирования:

public function ajaxFind(Request $request)
{
    // Recupero la città da ricercare
    $city = $request->get("city");
    // Recupero le città che rientrano nella mia ricerca
    $cities = City::with('province')->where('cities.name', 'like', $city . '%')->get();
    $result = [];
    foreach ($cities as $city) {
        $result[] = [
            "id" => $city->id,
            "text" => $city->name . " (" . $city->province->code . ")",
            "city" => $city->name,
            "province" => $city->province->code
        ];
    }
    return response()->json($result);
}

1 Ответ

1 голос
/ 27 апреля 2020

Как видно из документации для значения по умолчанию (https://select2.org/data-sources/ajax#default -pre-selected-values ​​) Вам необходимо удалить дополнительный код:

@if(isset($indirizzi)
  ...
@endif

И заменить ваш выбор:

<select class="form-control" id="city-name" name="city" style="width: 100%">
@if($indirizzi)
   <option value="{{ $indirizzi->city_id }}" selected="selected"> {{ $indirizzi->city->name }}</option>
@endif
</select>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...