【发布时间】:2021-10-02 16:56:10
【问题描述】:
我有一个简单的复选框表单,其中包含三个选项。我想动态计算价格,我没有将这些值存储在数据库中。
<div class="custom-control custom-checkbox">
<input type="checkbox"id="option1" wire:click="test" wire:model="additions" value="option1">
<label class="custom-control-label" for="option1">Option 1</label>
</div>
<div class="custom-control custom-checkbox">
<input type="checkbox" id="option2" wire:click="test" wire:model="additions" value="option2">
<label class="custom-control-label" for="option1">Option 2</label>
</div>
<div class="custom-control custom-checkbox">
<input type="checkbox" id="option3" wire:click="test" wire:model="additions" value="option3">
<label class="custom-control-label" for="option1">Option 3</label>
</div>
在我显示值的刀片文件中输出
{{ $checkout }}
每个选项都有不同的价格,我将添加到$checkout 以计算总价。
public $additions = [];
public $checkout = 0;
public function test()
{
// if (in_array('option1', $this->additions)) {
// $this->checkout =+ 10;
// Log::info($this->checkout);
// }
// if (in_array('option2', $this->additions)) {
// $this->checkout += 10;
// Log::info($this->checkout);
// }
// if (in_array('option3', $this->additions)) {
// $this->checkout += 10;
// Log::info($this->checkout);
// }
if (!empty($this->additions)) {
foreach ($this->additions as $key => $value) {
if ($value == 'option1') {
$this->checkout += 10;
}
if ($value == 'option2') {
$this->checkout += 10;
} else {
$this->checkout -= 10;
}
if ($value == 'option3') {
$this->checkout += 10;
} else {
$this->checkout -= 10;
}
}
Log::info($this->checkout);
}
}
价格增加但不正确。例如,每个选项我有 10 个,所以当所有三个选项都被选中时,总数将为 30,而当两个选项被选中时,则为 20,依此类推。我得到的是 60 多岁,远不及 30 岁。
任何帮助都将不胜感激。
编辑:
$this->additions 包含所有选中的项目。例如:如果选择了所有三个选项,$this->additions 将在数组中包含option1,option2,option3。
【问题讨论】:
-
很难说
$this->additions包含什么。是否有已检查项的列表? -
@waterloomatt 是的。
$this->additions有检查项目的列表。如果选中所有复选框,它将通过option1, option2, option3 -
带有复选框的值总是被传递。您需要检查 isset($key) 以真正查看复选框是否被标记。从那里你可以做数学。
-
@Justin 谢谢你的帮助
标签: php laravel laravel-livewire