当前位置: 首页 > 知识库问答 >
问题:

试图实现搜索框的自动提示,但无法正常工作

王建华
2023-03-14

正如您从上面的图片中看到的,下拉式建议应该直接位于搜索框的下面,并且与搜索框的格式相同,但是目前由于某种原因,它出现在下面,我尝试实现样式表,但是它完全搞乱了它。当我删除我输入到搜索框中的一个或多个字母时,下拉列表不会消失,而是一直保持在那里,直到我点击它。我一直在想办法,但我似乎不明白为什么会这样。

这是我的search_bar小枝

    <form method="GET" action="{{  route(setting('index')) }}" id="top-search" accept-charset="UTF-8" class="form-vertical">

        <div class="row">

            <div class="col-9">


                <div class="row">

                    <div class="col-12 {{ setting('enable_geo_search')?'col-sm-8':'col-sm-12' }} pr-0">
                        <div class="input-group mb-0">
                            <div class="input-group-prepend ">
                                <span class="input-group-text bg-white"><i class="fa fa-search" aria-hidden="true"></i></span>
                            </div>
                            <input class="form-control input-lg" placeholder="{{ __("Search...") }}" id="q" name="q" type="text" value="{{ input_get('q') }}" autocomplete="off">
                            <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
                            <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
                            {{ csrf_field() }}
                            <script>
                                $(document).ready(function(){

                                    $('#q').keyup(function(){
                                        var query = $(this).val();
                                        if(query != '')
                                        {
                                            var _token = $('input[name="_token"]').val();
                                            $.ajax({
                                                url:"{{ route('search_bar.fetch') }}",
                                                method:"POST",
                                                data:{query:query, _token:_token},
                                                success:function(data){
                                                    $('#categorylist').fadeIn();
                                                    $('#categorylist').html(data);
                                                }
                                            });
                                        }
                                    });

                                    $(document).on('click', 'li', function(){
                                        $('#q').val($(this).text());
                                        $('#categorylist').fadeOut();
                                    });

                                });
                            </script>
                    </div>
                    </div>
                </div>
            </div>

            <div class="col-3">
                <button class="btn btn-primary btn-block " type="submit">{{ __("Go!") }}</button>
            </div>
                <div id="categorylist"/>
        </div>
    </form>
</div>

这是控制器

function index()
{
    return view('search_box');
}

function fetch(Request $request)
{
    if($request->get('query'))
    {
        $query = $request->get('query');
        $data = DB::table('categories')
            ->where('name', 'LIKE', "%{$query}%")
            ->get();
        $output = '<ul class="dropdown-menu" style="display:block; position:relative">';
        foreach($data as $row)
        {
            $output .= '
   <li><a href="#">'.$row->name.'</a></li>';
        }
        $output .= '</ul>';
        echo $output;
    }
}

如果有人知道什么可能是错误的,我可以如何修复它,我会非常感激!

这是呈现的HTML

    <div class="pt-3 pb-3 mb-4 border-right-0 border-right-0 border-left-0 border-top-0 bg-light" >
<div class="container-fluid">

    <form method="GET" action="http://localhost" id="top-search" accept-charset="UTF-8" class="form-vertical">

        <div class="row">

            <div class="col-9">


                <div class="row">

                    <div class="col-12 col-sm-12 pr-0">
                        <div class="input-group mb-0">
                            <div class="input-group-prepend ">
                                <span class="input-group-text bg-white"><i class="fa fa-search" aria-hidden="true"></i></span>
                            </div>
                            <input class="form-control input-lg" placeholder="Search marketplace..." id="q" name="q" type="text" value="" autocomplete="off">
                            <div id="categorylist"/>
                            <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
                            <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
                            <input type="hidden" name="_token" value="fC9ZNDc6kpeZFpOotc3EGhJUQy5zRec41lZK1sRb">
                            <script>
                                $(document).ready(function(){

                                    $('#q').keyup(function(){
                                        var query = $(this).val();
                                        if(query != '')
                                        {
                                            var _token = $('input[name="_token"]').val();
                                            $.ajax({
                                                url:"http://localhost/search_bar/fetch",
                                                method:"POST",
                                                data:{query:query, _token:_token},
                                                success:function(data){
                                                    $('#categorylist').fadeIn();
                                                    $('#categorylist').html(data);
                                                }
                                            });
                                        } else {
                                            $('#categorylist').fadeOut();
                                        }
                                    });

                                    $(document).on('click', 'li', function(){
                                        $('#q').val($(this).text());
                                        $('#categorylist').fadeOut();
                                    });

                                });
                            </script>
                    </div>
                    </div>

                                        </div>
            </div>

            <div class="col-3">
                <button class="btn btn-primary btn-block " type="submit">Go!</button>
            </div>
        </div>
    </form>
</div>

共有1个答案

子车英达
2023-03-14

当您清除了输入时,没有处理。

简单的else应该可以解决此问题

$('#q').keyup(function(){
    var query = $(this).val();
    if(query != '')
    {
        var _token = $('input[name="_token"]').val();
        $.ajax({
            url:"{{ route('search_bar.fetch') }}",
            method:"POST",
            data:{query:query, _token:_token},
            success:function(data){
                $('#categorylist').fadeIn();
                $('#categorylist').html(data);
            }
        });
    } else {
        $('#categorylist').fadeOut();
    }
});

修复HTML:

将#CategoryList与.input-group移到同一个div中

添加CSS:

#categorylist {
    position: absolute;
    z-index: 1;
}

注意1:应使用比id=“q”更好的命名

注意2:这个ajax调用没有理由是“post”。

从数据库中提取数据时使用“get”

当您的请求修改DB中的数据时使用“POST”(插入/删除/更新)

 类似资料:
  • 本文向大家介绍自动完成的搜索框javascript实现,包括了自动完成的搜索框javascript实现的使用技巧和注意事项,需要的朋友参考一下 在很多需要搜索的网站, 都会有一个自动完成的搜索框. 方便用户查找他们想要的搜索词. 帮助用户快速找到自己想要的结果. 这种方式是比较友好的. 所以是比较提倡使用的. 我们这次就来实现这一效果. 我们通过两篇文章来进行讲解. 首先我们来完成界面的设计布局.

  • 本文向大家介绍基于javascript实现的搜索时自动提示功能,包括了基于javascript实现的搜索时自动提示功能的使用技巧和注意事项,需要的朋友参考一下 当在数据量不是很大,而且没有后端对应的功能接口的时候,一些简单的搜索功能基本上是前端去实现的,正好最近用到,写了一个,贴出来和大家分享: 效果图: 功能描述: 按下键盘后及时搜索条目中的汉字,汉字对应的拼音和号码; 实现思路: 先将条目中的

  • 本文向大家介绍easyUI实现类似搜索框关键词自动提示功能示例代码,包括了easyUI实现类似搜索框关键词自动提示功能示例代码的使用技巧和注意事项,需要的朋友参考一下 在一个DataGrid里面,搜索行所在位置 实现的效果如下: 在搜索框中输入部分列名关键字,即可匹配到行的位置。 EasyUI的SearchBox组件只提供了静态搜索框,我们可以使用ComboBox来实现动态的自动关键匹配效果,并且

  • 本文向大家介绍JavaScript实现搜索框的自动完成功能(一),包括了JavaScript实现搜索框的自动完成功能(一)的使用技巧和注意事项,需要的朋友参考一下 在很多需要搜索的网站, 都会有一个自动完成的搜索框. 方便用户查找他们想要的搜索词. 帮助用户快速找到自己想要的结果. 这种方式是比较友好的. 所以是比较提倡使用的. 先给大家展示下效果图:   实现这个功能需要服务端配合。客户端通过脚

  • 本文向大家介绍使用Ajax模仿百度搜索框的自动提示功能实例,包括了使用Ajax模仿百度搜索框的自动提示功能实例的使用技巧和注意事项,需要的朋友参考一下 啊啊,熬夜了。今天学习了ajax给我的感觉就是,”哇塞“ajax好酷炫哦,(额。。。后端狗,接触到了大前端的魅力了),这么晚了还是直奔主题把。Let's go! 百度搜索提示框,我想大家都很熟悉了把,是什么样子我也就不再赘述。直接看代码 来我们写一

  • 本文向大家介绍C语言实现图的搜索算法示例,包括了C语言实现图的搜索算法示例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C语言实现图的搜索算法。分享给大家供大家参考,具体如下: 在游戏中,常常遇到路径规划问题,用到图的相关算法,我们以简单图来学习。 图通常有两种表示方式,矩阵和邻接表。矩阵表示简单,运算快,但当矩阵是稀疏矩阵的时候就存在空间浪费的问题,并且效率也会下降,而邻接表节约空间,