当我从同一个表中选择第二个类别时,我的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>
答案 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混淆,它可以变得更干净,更好。
请看下面的建议:
首先,由于你在控制器中有ajax_select_sub_second_cat
,如果你还没有为它设置路线,你可以在routes.php
中这样做:
Route::post('getSubCategories', 'theController@ajax_select_sub_second_cat');
如果您在方法中注入/类型提示Laravel的GET
类,则可以通过任何方法POST
或Illuminate\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本身处理由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请求时应该使用控制台,这将有很大帮助并节省你的时间。