У меня есть модель Product
, и у меня есть фильтр области действия:
public function scopeFilter($query)
{
if (request('min') && request('max')) {
$query->where('price', '<=', request('max'))->where('price', '>=', request('min'));
}
if (request('attr')) {
$query->whereHas('attribute', function ($q) {
$q->whereIn('attribute_value_id', explode(',', request('attr')));
});
}
return $query;
}
И у меня есть флажки внешнего интерфейса с атрибутами имени:
@foreach($category->attribute as $attribute)
<section class="widget">
<h3 class="widget-title">
{{ $attribute->getTranslatedAttribute('title') }}
<span class="float-right ico-down" onclick="$('#filter-{{ $attribute->id }}').slideToggle();">
<i class="icon-chevron-down"></i>
</span>
</h3>
<div id="#filter-{{ $attribute->id }}">
<form id="from-{{ $attribute->id }}" action="" method="GET">
<div class="row">
@foreach($attribute->attributeValue as $value)
<div class="col-md-6">
<div class="custom-control custom-checkbox">
<input class="custom-control-input"
type="checkbox"
id="filter-{{ $value->id }}"
name="attr"
value="{{ $value->id }}"
onclick="this.checked ? checkFunc() : removeFunc()"
@if(request('attr') && in_array($value->id, explode(',', request('attr')))) checked @endif>
<label class="custom-control-label" for="filter-{{ $value->id }}">{{ $value->getTranslatedAttribute('value') }}</label>
</div>
</div>
@endforeach
</div>
</form>
</div>
</section>
@endforeach
@section('js')
<script>
var url = '?attr=';
function checkFunc() {
var id = $("[name=attr]:checked").map(function () {
return this.value;
}).get().join(",");
@if(request('attr'))
window.location.href = url + "{{ request('attr') }}," + id;
@else
window.location.href = url + id;
@endif
};
</script>
@endsection
Фильтры работают, но мой код Javascriptработает плохо.Когда я нажимаю на флажок, а потом хочу снять его, это не работает.И флажок множественного щелчка также не работает, в параметре get я получаю дубликаты атрибутов.Как я могу это исправить?