Onchange函数使用laravel5不起作用

Onchange function not working using laravel5

本文关键字:laravel5 不起作用 函数 Onchange      更新时间:2023-09-26

当我从同一个表中选择第二个类别时,我的onChange()函数无法使用Laravel 5。我可以得到第一个类别id。问题是onchange()函数。我需要更改什么?

控制器

public function ajax_select_sub_second_cat(){
    $id =  $_GET['id'];
    $main_cat = Category_model::get_sub_category_ajax($id);
    //return view('siteadmin.add_cat',['main_cat' => $category]);
    if($main_cat){
        $return  = "";
        $return  = "<option value='0'> -- Select -- </option>";
        foreach($main_cat as $main_cat_ajax) {
            $return .= "<option value='".$main_cat_ajax->sub_category1."'> ".$main_cat_ajax->sub_category1." </option>";        
        }
        echo $return;
    } else {
        echo $return = "<option value='0'> --Select-- </option>";
    }
}

查看

<select id="subcategory" name="product_sub_category" onChange="getCat1(this.value);"> 
    <option value="">-----Select Standard-----</option>
</select>
<script>
    function getCat1(id){
        var passData = 'id='+id;
        $.ajax( {
            type: 'get',
            data: passData,
            url: '<?php echo url('ajax_select_sub_second_cat'); ?>',
            success: function(responseText){  
                if(responseText){ 
                    $('#subcategory2').html(responseText);            
                }
            }   
        }); 
    }
</script>

我假设您需要在选项select的更改事件中执行一些操作。。

你可以这样做

$('select').on('change', function (e) {
    var optionSelected = $("option:selected", this);
    alert(optionSelected);
});

您可以在这里触发任何ajax调用或任何您想做的事情,而optionSelected就是所选择的项。

希望这对你有帮助。

1-首先,您必须确保事件在更改时启动并命中url。

2-检查您的控制台。您应该使用alert方法来保证函数正常运行。

alert(id);

如果每次更改都没有显示警报,请检查您的下拉代码

<option value="id">Name</option>

所有下拉值都必须采用此格式。

3-毕竟更换

url: '<?php echo url('ajax_select_sub_second_cat'); ?>',

url: 'ajax_select_sub_second_cat',

确保在路由文件中定义ajax_select_sub_second_cat,否则它将不起作用。

希望你不会遇到任何问题。当您发出ajax请求时,应该使用控制台,这将有很大帮助并节省您的时间。

问题的可能原因:

您的url属性的值中存在语法错误AJAX请求:

url: '<?php echo url('ajax_select_sub_second_cat'); ?>',

因为未连接的单引号会导致语法错误。

正确的方法是:

url: "<?php echo url('ajax_select_sub_second_cat'); ?>",

您的代码写得并不糟糕,而且可能足够公平,可以解决手头的问题。尽管如此,如果您不将JavaScript/jQuery代码与PHP混淆,它可能会变得更干净、更好。

请看下面我的建议:

PHP

首先,由于您在控制器中有ajax_select_sub_second_cat,并且如果您还没有为其设置路由,则可以在routes.php中这样做:

Route::post('getSubCategories', 'theController@ajax_select_sub_second_cat');

如果在方法中注入/键入hint Laravel的Illuminate'Http'Request类,则可以通过GETPOST中的任何方法访问发布的数据:

public function ajax_select_sub_second_cat(Request $request) // inject the HTTP request in the method
{
     //get the id of the selected field via post request
     $id = $request->input('id');
     //assuming that your Category_model returns the models
     $sub_cats = Category_model::get_sub_category_ajax($id);
     // ...

接下来,您可以将数据作为JSON编码的数据集/数组进行回显,而不是将数据回显为html

     // ...
     echo json_encode($sub_cats->toArray());
 }

jQuery

您可以使用jQuery本身处理由DOM元素触发的change事件,尽管使用onchange作为元素的属性不是问题。要让jQuery处理此问题,请使用change()方法:

$(function(){   
    $('#subcategory').change(function(){
        var selectedVal = $('#subcategory option:selected').text(); //this is how you get the selected value with jQuery
        $.ajax({
            type: "POST",
            url: "{{ url('getSubCategories') }}",
            data: {
                id: selectedVal
            },
            dataType: 'json', // force the ajax request to return json data
            success: function(returnedData){
                 // ...
            }
        });
    });
});

现在假设您已经回显了一组子类别,在AJAX请求的success处理程序中迭代返回的子类别集,并相应地填充第二个select。

查看jQuery的$.each(),了解集合的迭代