使用 jquery 创建搜索功能

Create a search feature with jquery

提问人:Hilmi Hidayat 提问时间:3/22/2021 更新时间:3/22/2021 访问量:500

问:

来自印度尼西亚的早上好。我想问一下如何在 laravel 中使用 jquery 创建搜索功能。enter image description here

上图是在搜索表单中输入文本之前的初始显示,其中有一个卡片标题,即标签数据。然后,我希望当用户在搜索表单中输入文本时,数据显示更改为如下所示(显示的数据没有卡头或数据标签)。但是,如果搜索表单为空,则数据显示将再次如上图所示。

enter image description here

我想问的是,为什么当我尝试输入更具体的数据(例如“模块 III”)时,即使有标题为“模块 III”的数据,也不会显示数据。

enter image description here

以下是在模式中显示搜索表单和数据模块的代码。

<div class="modal-body">
            <form>
                <div>
                    <label for="title" class="type-paragraph1">
                        All available digital module type created by your company author and AJAR Hospitality
                    </label>
                    <div class="form-group mb-1 pr-3">
                        <input type="text" id="searchInput" class="form-control" placeholder="Type to search modules">
                        
                    </div>
                </div>
                <div class="form-group self_paced_module" id="module_library_list">
                    <div class="digital-module-head">
                    </div>
                    <div id="dataDigitalList"></div>
                    <div id="moduleList"></div>
                    <input type="hidden" id="digital_title" name="digital_title[]">
                    <input type="hidden" id="digital_no" name="digital_no[]">
                    <div class="digital-module" id="digital_container"></div>
                </div>
            </form>
        </div>

这是在搜索表单中输入文本之前和之后显示数据的代码

                    var module_digital = "";
                var moduledigital = "";
                var id_digital = $('.id_digital').map(function (i, n) { return parseInt($(n).val()); }).get(); 
                // Get Unique Tags(cuma 1 biar ga kedouble2 tagnya)
                var tags = (data.file_assignment).map(function(value,index) {
                    return value['tag'];
                }).filter((value, index, self) => {
                    return self.indexOf(value) === index;
                });

                var modules = (data.file_assignment).filter((value, index, self) => {
                    return self.indexOf(value) === index;
                });
                

                $.each(tags, function(i,t){
                    module_digital += '<div class="card mb-1">';
                    module_digital += '    <div class="card-header collapsed" role="tab" id="accord_'+i+'">';
                    module_digital += '        <h5 class="mb-0">';
                    module_digital += '            <a class="font-demi type-paragraph2 accordion-list collapsed" data-toggle="collapse" data-parent="#accordionexample" href="#digital_x'+i+'" aria-expanded="false" aria-controls="digital_x'+i+'">'+t+'</a>';
                    module_digital += '        </h5>';
                    module_digital += '    </div>';
                    module_digital += '    <div id="digital_x'+i+'" class="collapse" role="tabpanel" aria-labelledby="accord_'+i+'">';
                    module_digital += '        <div class="card-body">';

                    $.each(data.file_assignment, function (index, fa) {
                        if($.inArray(fa.id, id_digital) < 0 && fa.tag == t) {
                            module_digital += '<div class="digital-module-head dataDigitalMode">';
                            module_digital += '    <div class="type-paragraph1">';
                            module_digital += '       <div>';
                            module_digital += '           <input data-title="'+fa.name+'" data-duration="'+fa.duration+'" data-type="'+fa.filetype+'" value="'+fa.id+'" type="checkbox" class="dmode" id="checkbox-fa'+index+'">';
                            module_digital += '           <label for="checkbox-fa'+index+'" id="title_digital" class="title_digital_filter">'+fa.name +'<br><span class="text-muted">'+ ((fa.code === null) ? '-' : fa.code) +'</span></label>';
                            module_digital += '       </div>';
                            module_digital += '    </div>';
                            // module_digital += '    <div class="type-paragraph1">01</div>';
                            module_digital += '    <div class="type-paragraph1">';
                            
                            switch(fa.filetype) {
                                case 'pdf':
                                    module_digital += '<div class="ajar-icon ajar-pdf ajar-icon-2x" title="'+fa.filetype.toUpperCase()+'"></div>';
                                    break;
                                case 'docx':
                                    module_digital += '<div class="ajar-icon ajar-doc ajar-icon-2x" title="'+fa.filetype.toUpperCase()+'"></div>';
                                    break;
                                case 'doc':
                                    module_digital += '<div class="ajar-icon ajar-doc ajar-icon-2x" title="'+fa.filetype.toUpperCase()+'"></div>';
                                    break;
                                case 'pptx':
                                    module_digital += '<div class="ajar-icon ajar-ppt ajar-icon-2x" title="'+fa.filetype.toUpperCase()+'"></div>';
                                    break;
                                case 'ppt':
                                    module_digital += '<div class="ajar-icon ajar-ppt ajar-icon-2x" title="'+fa.filetype.toUpperCase()+'"></div>';
                                    break;
                                case 'xlsx':
                                    module_digital += '<div class="ajar-icon ajar-excel ajar-icon-2x" title="'+fa.filetype.toUpperCase()+'"></div>';
                                    break;
                                case 'xls':
                                    module_digital += '<div class="ajar-icon ajar-excel ajar-icon-2x" title="'+fa.filetype.toUpperCase()+'"></div>';
                                    break;
                                case 'mp3':
                                    module_digital += '<div class="ajar-icon ajar-mp3 ajar-icon-2x" title="'+fa.filetype.toUpperCase()+'"></div>';
                                    break;
                                case 'mp4':
                                    module_digital += '<div class="ajar-icon ajar-mp4 ajar-icon-2x" title="'+fa.filetype.toUpperCase()+'"></div>';
                                    break;
                                case 'm3u8':
                                    module_digital += '<div class="ajar-icon ajar-mp4 ajar-icon-2x" title="'+fa.filetype.toUpperCase()+'"></div>';
                                    break;
                                case 'youtube':
                                    module_digital += '<div class="ajar-icon ajar-mp4 ajar-icon-2x" title="'+fa.filetype.toUpperCase()+'"></div>';
                                    break;
                            }
                            module_digital += '    </div>';
                            module_digital += '</div>';
                        }
                    });

                    module_digital += '        </div>';
                    module_digital += '    </div>';
                    module_digital += '</div>';
                });

                if (module_digital == "") {
                    module_digital += '<div class="digital-module-head text-center" id="no_module_found">';
                } else {
                    module_digital += '<div class="digital-module-head text-center" id="no_module_found" style="display:none;">';
                }
                module_digital += '    <div>No Module Library Found</div>';
                module_digital += '</div>';

                $('#dataDigitalList').html(module_digital);

                $.each(modules, function(index,fa){
                    
                            moduledigital += '<div class="card mb-1">';
                            moduledigital += '<div class="card-body">';
                            moduledigital += '<div class="digital-module-head moduleData">';
                            moduledigital += '    <div class="type-paragraph1">';
                            moduledigital += '       <div>';
                            moduledigital += '           <input data-title="'+fa.name+'" data-duration="'+fa.duration+'" data-type="'+fa.filetype+'" value="'+fa.id+'" type="checkbox" class="dmode" id="checkbox-fa'+index+'">';
                            moduledigital += '           <label for="checkbox-fa'+index+'" id="title_digital" class="module_filter">'+fa.name +'<br><span class="text-muted">'+ ((fa.tag === null) ? '-' : fa.tag) +'</span><br><span class="text-muted">'+ ((fa.code === null) ? '-' : fa.code) +'</span></label>';
                            moduledigital += '       </div>';
                            moduledigital += '    </div>';
                            // module_digital += '    <div class="type-paragraph1">01</div>';
                            moduledigital += '    <div class="type-paragraph1">';
                            
                            switch(fa.filetype) {
                                case 'pdf':
                                moduledigital += '<div class="ajar-icon ajar-pdf ajar-icon-2x" title="'+fa.filetype.toUpperCase()+'"></div>';
                                    break;
                                case 'docx':
                                moduledigital += '<div class="ajar-icon ajar-doc ajar-icon-2x" title="'+fa.filetype.toUpperCase()+'"></div>';
                                    break;
                                case 'doc':
                                moduledigital += '<div class="ajar-icon ajar-doc ajar-icon-2x" title="'+fa.filetype.toUpperCase()+'"></div>';
                                    break;
                                case 'pptx':
                                moduledigital += '<div class="ajar-icon ajar-ppt ajar-icon-2x" title="'+fa.filetype.toUpperCase()+'"></div>';
                                    break;
                                case 'ppt':
                                moduledigital += '<div class="ajar-icon ajar-ppt ajar-icon-2x" title="'+fa.filetype.toUpperCase()+'"></div>';
                                    break;
                                case 'xlsx':
                                moduledigital += '<div class="ajar-icon ajar-excel ajar-icon-2x" title="'+fa.filetype.toUpperCase()+'"></div>';
                                    break;
                                case 'xls':
                                moduledigital += '<div class="ajar-icon ajar-excel ajar-icon-2x" title="'+fa.filetype.toUpperCase()+'"></div>';
                                    break;
                                case 'mp3':
                                moduledigital += '<div class="ajar-icon ajar-mp3 ajar-icon-2x" title="'+fa.filetype.toUpperCase()+'"></div>';
                                    break;
                                case 'mp4':
                                moduledigital += '<div class="ajar-icon ajar-mp4 ajar-icon-2x" title="'+fa.filetype.toUpperCase()+'"></div>';
                                    break;
                                case 'm3u8':
                                moduledigital += '<div class="ajar-icon ajar-mp4 ajar-icon-2x" title="'+fa.filetype.toUpperCase()+'"></div>';
                                    break;
                                case 'youtube':
                                moduledigital += '<div class="ajar-icon ajar-mp4 ajar-icon-2x" title="'+fa.filetype.toUpperCase()+'"></div>';
                                    break;
                            }
                            moduledigital += '    </div>';
                            moduledigital += '</div>';
                            moduledigital += '        </div>';
                            moduledigital += '</div>';
                        
                    });


                if (moduledigital == "") {
                    moduledigital += '<div class="digital-module-head text-center" id="no_module_found">';
                } else {
                    moduledigital += '<div class="digital-module-head text-center" id="no_module_found" style="display:none;">';
                }
                moduledigital += '    <div>No Module Library Found</div>';
                moduledigital += '</div>';
                

                $('#moduleList').html(moduledigital).hide();

那么以下是我之前创建的用于搜索的数据

$('#searchInput').on('keyup', function (element) {
    $('#dataDigitalList').show();
    var inputs = $('#searchInput').val().toLowerCase();
    var container = $('#moduleList');
    var count = 0;
    
    container.find('.module_filter').each(function () {
        if ($(this).text().toLowerCase().search(inputs) > -1) {
            $('#dataDigitalList').hide();
            $('#moduleList').show();
            $(this).parents('.card').show();
            count++;
        }
        else {
            $('#moduleList').hide();
            $(this).parents('.card').hide();
        }
    });

    if (!count) {
        $('#no_module_found').show();
    }
    else {
        $('#no_module_found').hide();       
    }
});

有人可以帮忙吗?如何使我创建的搜索功能运行良好?以及如何使搜索数据中的复选框可点击?

javascript php jquery laravel

评论

0赞 Mohammad Fahad Rao 3/22/2021
是否要在相同的框中显示结果?
0赞 Swati 3/22/2021
你能显示生成的html吗?
0赞 Hilmi Hidayat 3/22/2021
是的,@MohammadFahadRao我想在同一框中显示结果
0赞 Mohammad Fahad Rao 3/22/2021
然后,您可以使用子视图显示 resut,创建一个子视图,仅显示针对查询获取的结果,并将 div 替换为这些结果
0赞 Hilmi Hidayat 3/22/2021
显示生成的 HTML @Swati是什么意思?HTML是否用于显示数据和搜索表单?如果html显示数据和搜索表单,我把它做成这样 pastebin.pl/view/a649fd1c

答: 暂无答案