使用laravel5无法使用Onchange功能

时间:2015-12-30 09:25:57

标签: javascript ajax laravel-5.1 onchange

当我从同一个表中选择第二个类别时,我的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>

3 个答案:

答案 0 :(得分:0)

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

你可以这样做

cb = args.pop() # cb will be the last element, args will contain the rest
if typeof cb isnt 'function' or cb.length isnt 2 # as a partial solution
    cb = (err, results) ->
      ...

您可以触发任何ajax调用或您希望在此处执行的任何操作,$('select').on('change', function (e) { var optionSelected = $("option:selected", this); alert(optionSelected); }); 是所选项目。

希望这会对你有所帮助。

答案 1 :(得分:0)

问题的可能原因:

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

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

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

正确的方法是:

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

您的代码编写得不好,并且可能足以解决您手边的问题。虽然,如果你不将PHP / jQuery代码与PHP混淆,它可以变得更干净,更好。

请看下面的建议:

PHP

首先,由于你在控制器中有ajax_select_sub_second_cat,如果你还没有为它设置路线,你可以在routes.php中这样做:

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

如果您在方法中注入/类型提示Laravel的GET类,则可以通过任何方法POSTIlluminate\Http\Request访问您发布的数据:

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处理程序中迭代返回的子类别集,并相应地填充第二个选择。

查看jQuery的$.each()以进行集合迭代。

答案 2 :(得分:0)

1-首先,你必须确保事件在更改时触发并点击网址。

2-检查您的控制台。您应该使用警报方法确保函数正常运行。

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请求时应该使用控制台,这将有很大帮助并节省你的时间。