首頁  >  問答  >  主體

"解決select2無法選取資料的問題"

在編輯資料時,我的 select2 有一個小問題,select2 不會選擇該值 這是我的數據顯示表數據

當我單擊“編輯資料”按鈕時,它應該在父值上選擇“設定”,但它不起作用,請參閱此

模態腳本

#
<div class="modal fade" id="modal-edit" tabindex="-1" role="dialog" aria-labelledby="mySmallModalLabel" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered">
    <div class="modal-content">
        <div class="modal-header">
            <h5 class="modal-title mt-0">Edit Data Navigation</h5>
            <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
        </div>
        <div class="modal-body">
            <input type="hidden" id="token" value="{{ csrf_token() }}">
            <input type="hidden" id="nav_id">
            <div class="form-group">
                <label>Nama Menu</label>
                <input type="text" name="name" class="form-control name" id="name"
                    placeholder="Type something" />
                <div class="alert alert-danger mt-2 d-none" role="alert" id="alert-name"></div>
            </div>
            <div class="form-group">
                <label>URL</label>
                <input type="text" name="url" class="form-control url" id="url"
                    placeholder="Type something" />
                <div class="alert alert-danger mt-2 d-none" role="alert" id="alert-url"></div>
            </div>
            <div class="form-group">
                <label>Icon</label>
                <input type="text" name="icon" class="form-control icon" id="icon"
                    placeholder="Type something" />
                <div class="alert alert-danger mt-2 d-none" role="alert" id="alert-icon"></div>
            </div>
            <div class="form-group">
                <label>Parent</label>
                <select id="parent_id" class="form-control parent_id">
                    <option value=""></option>
                </select>
                <div class="alert alert-danger mt-2 d-none" role="alert" id="alert-parent"></div>
            </div>
        </div>
        <div class="modal-footer">
            <button type="button" class="btn btn-secondary" data-dismiss="modal">TUTUP</button>
            <button type="button" class="btn btn-primary" id="update">SIMPAN</button>
        </div>
    </div><!-- /.modal-content -->
</div><!-- /.modal-dialog -->

這是我的ajax腳本

Ajax 腳本

#
// select2 data parents
$(document).ready(function() {
    var _token = $('meta[name="csrf-token"]').attr('content');
    var parentSelect = $('.parent_id');
    $(".parent_id").select2({
        dropdownParent: $('#modal-edit'),
        placeholder: 'Choose Parent',
        ajax: {
            url: "{{ route('getNavigations') }}",
            type: "get",
            dataType: 'json',
            delay: 250,
            data: function(params) {
                return {
                    token: _token,
                    search: params.term // search term
                };
            },
            processResults: function(response) {
                return {
                    results: response
                };
            },
            cache: true
        }
    });
});

點擊編輯按鈕時獲取資料我通常使用觸發器來設定 select2 的選定值,但它不起作用

取得資料

$('body').on('click', '#btn-edit-post', function() {
    var nav_id = $(this).data('id');
    //fetch detail post with ajax
    $.ajax({
        url: `navigations/${nav_id}`,
        type: "GET",
        cache: false,
        success: function(response) {
            // console.log(response);
            //fill data to form
            $('#nav_id').val(response.data.id);
            $('.name').val(response.data.name);
            $('.url').val(response.data.url);
            $('.icon').val(response.data.icon);
            $('.parent_id').val(response.data.parent_id).trigger('change');
            //open modal
            $('#modal-edit').modal('show');
        }
    });
});

這是我的控制器

控制器

public function getNavigations(Request $request)
{
    $search = $request->search;
    if ($search == '') {
        $navigation = Navigation::orderby('name', 'asc')->select('id', 'name', 'parent_id')->where('parent_id')->limit(5)->get();
    } else {
        $navigation = Navigation::orderby('name', 'asc')->select('id', 'name', 'parent_id')->where('name', 'like', '%' . $search . '%')->limit(5)->get();
    }
    // create respons
    $response = array();
    foreach ($navigation as $parent) {
        $response[] = array(
            "id"        => $parent->id,
            "text"      => $parent->name,
        );
    }
    // dd($response);
    return response()->json($response);
}

資料顯示但未選中,應該是這樣的

我不知道我寫程式碼的方式是否正確,我是程式碼新手,所以請幫我:)

P粉604848588P粉604848588210 天前320

全部回覆(1)我來回復

  • P粉727531237

    P粉7275312372024-02-27 00:21:17

    所以我找到了我創建的程式碼的解決方案。我在控制器和我的JavaScript腳本中添加了一些程式碼。以下是我添加的程式碼:

    在控制器中,為了獲取數據,我添加了以下程式碼:

    // 取得所有父導航項目(不包括目前導航項目)
        $parentItems = Navigation::where('id', '!=', $id)->get(['id', 'name']);

    這是程式碼的完成部分 點擊這裡查看

    至於JavaScript,我對select2的回傳值進行了一些更改,如下所示:

    /// 根據parent_id取得父項的名稱
                var parentName = '';
                var parentItem = response.parent_items.find(function(item) {
                    return item.id === response.data.parent_id;
                });
                if (parentItem) {
                    parentName = parentItem.name;
                }
                var newOption = new Option(parentName, response.data.parent_id, true, true);
                $(".parent_id").append(newOption).trigger('change');

    這是程式碼的完成部分 點擊這裡查看

    回覆
    0
  • 取消回覆