AJAX填充Select2不可点击

Posted

技术标签:

【中文标题】AJAX填充Select2不可点击【英文标题】:AJAX filled Select2 not clickable 【发布时间】:2016-06-03 02:35:45 【问题描述】:

我将 Select2 用于一个项目。第二个选择框的填充取决于第一个框中的所选项目,如下面的链接所示。但是,由于某种原因,我无法单击第二个选择框中的第一项。如果我愿意,我选择第一个项目的唯一方法是首先选择不同的用户,然后返回第一个用户。我该如何解决这个问题?

视频:

我的代码:

这是第一个选择框,由常规 php (Laravel) 填充。这里一切正常。

<div class="form-group">
    <label for="select"> Partner: </label>
    <select id="select" name="select" class="searchselect searchselectstyle">
        @foreach($partners as $i => $partner)
            <option $i == 0 ? 'selected' : '' value="$partner->id">$partner->name</option>
        @endforeach
    </select>
</div>

这里是第二个选择框,有错误。

<div class="form-group" >
    <label for="select2"> Hoofdgebruiker: </label>
    <select id="select2" style="min-width: 200px;" name="select2" class="searchselect searchselectstyle">

    </select>
</div>


<script type="text/javascript">
$(document).ready(function()
    var url = '/json/getusers';
    var $post = ;
    $post.id = $("select").val();

    $.ajax(
        type: "POST",
        dataType: "json",
        url: url,
        data: $post,
        cache: false
    ).done(function(data)
                $('#select2')
                        .find('option')
                        .remove()
                        .end();

                $.each(data, function(i, value) 
                    console.log(data);
                    $('#select2').append($('<option>').text(value.text).attr('value', value.id));
                );
            
    );
);

-

public function getusers()
    if(!isset($_POST['term']))
        $users = User::where('partner_id', $_POST['id'])->get();
    else
        $wildcard = '%'.$_POST['term'].'%';
        $users = User::where('partner_id', $_POST['id'])->where('email', 'LIKE',  $wildcard)->get();
    

    $array = array();

    foreach($users as $i => $user)
        $array[$i] = array("id" => $user->id, "text" => $user->email);
    
    return response()->json($array);

【问题讨论】:

您是否尝试过在$.each 函数之前附加一个空白选项(&lt;option&gt;&lt;/option&gt;)? @ArmanOzak 这给了我一个小的空选项,比如这里:gyazo.com/17a79875dd28a43cac148f576c5eb659 好的。您还可以在您的&lt;select&gt; 标签上添加data-placeholder="Anything you like here" 吗?顺便说一句,当你这样做时,你也应该在你的 PHP 中添加一个空白选项。 @ArmanOzak 同样的问题:bit.ly/20Oi3Wq 最后一个想法:您能否尝试在创建新选项之前放置$('#select2').select2('destroy');,在创建它们之后放置$('#select2').select2();?如果这也不起作用,我保证,我没有想法。 (: 【参考方案1】:

检查 json 数据中键“id”是否区分大小写。可能您返回“ID”而不是“id”。

"results":["id":"3","text":"Exampe 3","id":"4","text":"Example 4","id":"16","text":"Example 16"]

不是这样的

"results":["ID":"3","text":"Exampe 3","ID":"4","text":"Example 4","ID":"16","text":"Example 16"]

【讨论】:

非常感谢兄弟!这是一个解决方案!该参数确实需要是“id”,而不是另一个名称。【参考方案2】:

我找到了解决办法,如下:

<script type="text/javascript">
    $(document).ready(function() 
        $(".searchselect").select2();

        search();
        $("#select").change(function()
            search();
        );
    );

    function search()
        var $post = ;
        $post.id = $("#select").val();
        $("#select2").select2(
            ajax: 
                dataType: "json",
                type: "POST",
                data: function (params) 
                    var query = 
                        term: params.term,
                        id: $post.id
                    ;
                    return query;
                ,
                url: '/json/getusers',
                cache: false,
                processResults: function (data) 
                    return 
                        results: data
                    ;
                
            
        );
    
</script>

现在我正在使用 Select2 中内置的常规 AJAX 功能,现在一切正常!

【讨论】:

以上是关于AJAX填充Select2不可点击的主要内容,如果未能解决你的问题,请参考以下文章

使用 AJAX 数据填充 Select2

动态填充 select2 下拉列表

使用 AJAX 预填充 Select2 - “未找到结果”

在 select2 ajax rails 上填充初始值

如何格式化基于 ajax 的 Select2 预填充?

select2 4.0 AJAX 预填充如何?