用户输入3个数据后如何显示select2

Posted

技术标签:

【中文标题】用户输入3个数据后如何显示select2【英文标题】:how to display select2 after user input 3 data 【发布时间】:2020-05-16 23:41:31 【问题描述】:

我这里有select2来显示用户email数据,但是数据可能高达几万,这让我的select2很慢,有没有办法只在用户输入3个字母后才显示?

这是我的脚本选择2

$('#add_form').find("#list_user").select2(
                              width: "100%",
                              placeholder: "Choose User by Email...",
                              ajax: 
                                url: " route('getuser') ",
                                dataType: "json",
                                delay: 250,
                                processResults: function(data) 
                                  return 
                                    results: $.map(data, function(obj) 
                                      return 
                                        id: obj.email,
                                        text: obj.email
                                      ;
                                    )
                                  ;
                                ,
                              
                            );

这是我的控制器

public function getUser(Request $request)
        
            $search = $request->input('term', '');
            $user = DB::table('users.users')->where('email','LIKE','%'.$search.'%')
                    ->get();
            return response()->json($user);
        

【问题讨论】:

问题仅仅是由于数据的权重。向 DOM 添加 10,000 个元素(或者甚至是其倍数,因为 Select2 选项包含 2 或 3 个单独的元素)永远不会很快。我建议您改为使用自动完成字段并通过 AJAX 在您的服务器上实现搜索逻辑。 @RoryMcCrossan 您如何看待 jquery 自动完成插件?能解决我的问题吗? 这可行,但实现自动完成功能只是解决方案的一半。正如我所提到的,您需要编写控制器逻辑来执行搜索/过滤/分页 【参考方案1】:

解决您的问题的唯一方法是只获取一些记录并显示它们。然后从select中你需要调用控制器再次搜索数据并显示它。

为此,您可以将查询更改为

user = DB::table('users.users')->where('email','LIKE','%'.$search.'%')->take(10)->get()

对于可搜索的选择,您可以参考 this link 和此 JSFiddle link

【讨论】:

以上是关于用户输入3个数据后如何显示select2的主要内容,如果未能解决你的问题,请参考以下文章

验证后的Laravel Select2旧输入

select2 noresult 捕获输入

在 select2 中捕获输入键

select2不保存编辑的输入

如何在使用 qrcode 扫描后将数据插入 select2 搜索输入

如何在无法输入文本的情况下在 Select2 中使用“多个选择框”选项?