I have multiple sliders in a form, each with a value ranging from 0-5. Sliders work as expected and calculates properly on the page. My issue is, I am unable to get the values of each slider via Livewire.
Here is a screenshot of the form:
https://www.screencast.com/t/weEm5Zt8
Code for the sliders:
<div wire:ignore class="review-score-form fl-wrap">
<div class="review-range-container">
<!-- review-range-item-->
<div class="review-range-item">
<div class="range-slider-title">Quality</div>
<div class="range-slider-wrap ">
<input type="text" wire:model.defer="quality_rating" id="quality_rating" class="rate-range" data-min="0" data-max="5" name="rgcl" data-step="1" value="4">
</div>
</div>
<!-- review-range-item end -->
<!-- review-range-item-->
<div class="review-range-item">
<div class="range-slider-title">Pricing</div>
<div class="range-slider-wrap">
<input type="text" wire:model.defer="pricing_rating" id="pricing_rating" class="rate-range" data-min="0" data-max="5" name="rgcl" data-step="1" value="3">
</div>
</div>
<!-- review-range-item end -->
<!-- review-range-item-->
<div class="review-range-item">
<div class="range-slider-title">Friendliness</div>
<div class="range-slider-wrap ">
<input type="text" wire:model.defer="friendly_rating" id="friendly_rating" class="rate-range" data-min="0" data-max="5" name="rgcl" data-step="1" value="5">
</div>
</div>
<!-- review-range-item end -->
<!-- review-range-item-->
<div class="review-range-item">
<div class="range-slider-title">Customer Service</div>
<div class="range-slider-wrap ">
<input type="text" wire:model.defer="customer_service_rating" id="customer_service_rating" class="rate-range" data-min="0" data-max="5" name="rgcl" data-step="1" value="4">
</div>
</div>
<!-- review-range-item end -->
</div>
<div class="review-total">
<span><input type="text" wire:model.defer="rating" name="rating" data-form="AVG({rgcl})"></span>
<strong>Your Score</strong>
</div>
</div>
Component Code:
namespace App\Http\Livewire;
use Livewire\Component;
class RateProfessional extends Component
{
public $customer_service_rating = 5;
public $quality_rating = 5;
public $friendly_rating = 5;
public $pricing_rating = 5;
public $rating = 5.0;
protected $listeners = [
'quality_rating',
];
public function quality_rating($value)
{
$this->quality_rating = $value;
}
public function render()
{
return view('livewire.rate-professional');
}
public function submit()
{
dd($this->quality_rating);
}
}
When I submit the form, the value of $this->quality_rating is always 5, no matter what the value of the slider is. I have tried to get the value using this:
$(document).ready(function() {
$('#quality_rating').on('change', function (e) {
livewire.emit('quality_rating', e.target.value)
});
});
I have searched and cannot find the solution to this issue. I am fairly new to Livewire and am sure I am missing something probably pretty simple. Any help would be greatly appreciated.