我正在使用Laravel并且正在创建一个表单,用户可以先选择一个类别,然后选择一个相关的子类别。
类别具有id和名称,子类别具有id和名称,以及parent_id(以便“父类别的id”)。
现在我尝试以下方法:
用户可以选择一个类别,在他这样做之后,第二个select
出现,用户可以从属于父类别的子类别中选择子类别(只有那些!)。
因此,视图会从控制器中获取所有类别和所有子类别。
然后,对于我这样做的类别:
<div class="form-group{{ $errors->has('category') ? ' has-error' : '' }}">
<label for="category" class="col-md-4 control-label">Kategorie</label>
<div class="col-md-6">
<select>
@foreach($categories as $category)
<option value="<?php echo $category['id'];?>">{{$category->name}}</option>
@endforeach
</select>
</div>
</div>
对于子类别,我有相同的,只有子类别:
<div class="form-group{{ $errors->has('subCategory') ? ' has-error' : '' }}">
<label for="subCategory" class="col-md-4 control-label">Unterkategorie</label>
<div class="col-md-6">
<select>
@foreach($subCategories as $subCategory)
<option value="<?php echo $subCategory['id'];?>">{{$subCategory->name}}</option>
@endforeach
</select>
</div>
</div>
现在问题是:我需要做的是(在子类别foreach中)@if
并检查所选option
category select
的值,然后检查{ {1}},用伪代码说出来。我怎样才能做到这一点?在某人没有选择子类别之前,我不想发送表单或其他内容......当然,我可能会在选择类别时向控制器发送ajax请求,然后检查控制器中选项的值并发回id。但这会导致非常多的流量,并且可能不是最好的解决方案,所以我只想这样做,如果我没有更好的方法去做....
PS:问题不在于没有选择类别时隐藏子类别,那就是基本的js,我知道如何做到这一点。我只想知道,如果在尚未发送表单的情况下可以读取if($subcategory->parent_id == $chosenOptionID)
的值。
编辑:我现在尝试了AJAX,但似乎有一点错误...... 我改变了什么:
category select
现在选择为空并且有一个ID。然后在同一个文件中我有以下JS:
<div class="form-group{{ $errors->has('subCategory') ? ' has-error' : '' }}">
<label for="subCategory" class="col-md-4 control-label">Unterkategorie</label>
<div class="col-md-6">
<select class="form-control" id="subCategorySelect">
</select>
</div>
</div>
<script>
$().ready(function(){
$('#categorySelect').change(function(){
var selectedOption = $('#categorySelect').find(":selected").val();
$.ajax({
url: '/getSubCategories',
data: {'id': selectedOption},
type: 'GET',
success: function (data) {
$('#subCategorySelect').html(data);
}
});
});
});
</script>
路由指向我控制器中的以下函数:
/getSubcategories
但它不起作用。在选择一个选项时,会默认发送ajax请求,并发送正确的ID。但不知怎的,没有输出任何想法为什么?
答案 0 :(得分:1)
我终于使用了AJAX。这是我最初的subCategorySelect
。
<div class="form-group{{ $errors->has('subCategory') ? ' has-error' : '' }}">
<label for="subCategory" class="col-md-4 control-label">Unterkategorie</label>
<div class="col-md-6">
<select class="form-control" id="subCategorySelect">
</select>
</div>
</div>
现在选择为空并且有一个ID。然后在同一个文件中我有以下JS:
<script>
$().ready(function(){
$('#categorySelect').change(function(){
var selectedOption = $('#categorySelect').find(":selected").val();
$.ajax({
url: '/getSubCategories',
data: {'id': selectedOption},
type: 'GET',
success: function (data) {
$('#subCategorySelect').html(data);
}
});
});
});
</script>
/getSubcategories
路由指向我控制器中的以下函数:
public function returnSubCategories(Request $request){
$subCategories = Subcategory::where('parent_id', '=', $request->id)->get();
foreach($subCategories as $subCategory){
echo "<option value='$subCategory->id'>$subCategory->name</option>";
}
}
它完美无缺。
答案 1 :(得分:0)
希望这可以帮助您了解如何使用php来选择一个选项:
@foreach($notes->sortBy('values') as $notification)
<tbody>
<tr>
<td> {{ $notification->website_url }} </td>
@if($notification->status('health') == 'up')
<td> {{ $notification->status('health') }} <span class="up"></span></td>
@else
<td> {{ $notification->status('health') }} <span class="down"></span></td>
@endif
<td> </td>
<td class="<?php echo $notification->active == 1 ? 'active' : '' ?>">
{{ $notification->active == 1 ? 'Yes' : 'No' }}
</td>
<td>
<a href="{{ route('notifications.edit', [$notification->id]) }}">
<input type="submit" name="showmore" value="show more"/>
</a>
</td>
<td></td>
</tr>
</tbody>
@endforeach