Php 拉威尔活滤器

Php 拉威尔活滤器,php,jquery,laravel,filter,laravel-blade,Php,Jquery,Laravel,Filter,Laravel Blade,我有一张如下所示的表格。 我有三个“白色”下拉列表来过滤设备注册标签下拉列表的值(只有在用户为三个“白色”下拉列表选择值后,才会显示具有设备注册标签的下拉输入字段的值)。因此,设备注册标签值将根据“白色”下拉列表值而有所不同 我希望它是一个活的过滤器,下拉选项将立即改变,每次用户选择“白色”下拉值。目前,我的方法是在“白色”下拉列表上使用onchange=“this.form.submit()”属性,并在筛选后返回值,但我意识到这种方法有一个缺点,即用户可能会在更改“白色”下拉列表的值时意外提

我有一张如下所示的表格。 我有三个“白色”下拉列表来过滤设备注册标签下拉列表的值(只有在用户为三个“白色”下拉列表选择值后,才会显示具有设备注册标签的下拉输入字段的值)。因此,设备注册标签值将根据“白色”下拉列表值而有所不同

我希望它是一个活的过滤器,下拉选项将立即改变,每次用户选择“白色”下拉值。目前,我的方法是在“白色”下拉列表上使用
onchange=“this.form.submit()”
属性,并在筛选后返回值,但我意识到这种方法有一个缺点,即用户可能会在更改“白色”下拉列表的值时意外提交表单。如何防止这种情况发生,并仅允许用户通过单击“保存”按钮提交表单

    $this->Calibration_Location = $request->get('selected_location');
    $this->Calibration_Category = $request->get('selected_category');
    $this->categories = Equipment::select('Category')->distinct()->get()->toArray();
    $this->locations = Equipment::select('Location')->distinct()->get()->toArray();
    $matchThese = ['Category' => $this->Calibration_Category, 'Location' => $this->Calibration_Location];
    $this->Registration_Select_Tags = Equipment::select('Registration Tag')->distinct()->where($matchThese)->get();
我也尝试过jQuery,但我只能通过指定的下拉字段触发,而不能触发其中任何一个

<script type="text/javascript">
        $(document).ready(function() {
            var location, category
            $('#selected_transfer_location').change(function() {
                location = $(this).val();
                console.log(location);
                $('#selected_transfer_category').change(function() {
                    category = $(this).val();
                    console.log(category);
                });

                // $('#transfer_registration_tag').find('option').not(':first').remove();

                $.ajax({
                    url: 'Transaction/' + location + '/' + category,
                    type: 'get',
                    dataType: 'json',
                    success: function(response) {
                        var len = 0;
                        if (response.data != null) {
                            len = response.data.length;
                        }

                        if (len > 0) {
                            for (var i = 0; i < len; i++) {
                                var id = response.data[i]['Registration Tag'];
                                var name = response.data[i]['Registration Tag'];

                                var option = "<option value='" + id + "'>" + name +
                                    "</option>";

                                $("#transfer_registration_tag").append(option);
                            }
                        }
                    }
                })
            });

        });

    </script>

$(文档).ready(函数(){
变量位置、类别
$('#所选_传输_位置')。更改(函数(){
位置=$(this.val();
控制台日志(位置);
$('#所选_传输_类别')。更改(函数(){
category=$(this.val();
控制台日志(类别);
});
//$('#传输\注册\标记')。查找('option')。不(':first')。删除();
$.ajax({
url:“交易/”+位置+“/”+类别,
键入:“get”,
数据类型:“json”,
成功:功能(响应){
var-len=0;
if(response.data!=null){
len=响应.data.length;
}
如果(len>0){
对于(变量i=0;i

我希望我的问题很清楚,对Laravel来说还是个新问题,我希望能从您那里得到一些提示。

第一种方法可能是,您使用call ajax Query对每个问题进行更改,并获取过滤结果。大概是这样的:

$('#dropdown1, #dropdown2, #dropdown3').change(function(){
    var val1 = $('#dropdown1').val();
    var val2 = $('#dropdown2').val();
    var val3 = $('#dropdown3').val();

    //And then your ajax call here to fetch filtered results.
});
唯一的问题是这个Ajax调用至少会发生3次,每个调用一次

第二种方法是在这些下拉列表下面设置一个小按钮,比如FetchTags。当用户选择全部3个值时,将单击该按钮,您将调用该btn的ajax onClick。这样,您的Ajax将只被调用一次。

您可以使用它来实现这一点。这很容易。 要安装它,您必须通过点击following命令来使用composer:
composer-req-livewire/livewire


请查看本教程,了解如何使用该框架完成您想做的事情。

我很好奇,实际上,将livewire与REST和控制器混合使用是一种好方法吗?(仍然是新的,如果我的问题很奇怪,很抱歉)我想如果你使用REST就不是了。很抱歉我第一次这样回答。Livewire仅在
TALL
stack(Tailwind Alpine Laravel Livewire)下有用