首页  >  问答  >  正文

"解决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粉604848588259 天前377

全部回复(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
  • 取消回复