You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Laravel控制器计算的折扣值自动填充到视图的输入框中

实现方案

你需要的实时计算效果属于前端交互逻辑,用原生JavaScript即可实现,无需依赖额外框架,同时你现有代码还有两处小问题需要同步修正:

1. 修正视图HTML代码

先给三个输入框添加id属性,方便JS获取元素,同时折扣输入框可设置为只读,避免用户手动修改导致数值不匹配:

<div class="form-group col-md-2">
    <label for="sale_price">售价</label>
    <input type="number" id="sale_price" pattern="[0-9]+([\.,][0-9]+)?" step="0.01" name="sale_price" class="form-control">
</div>

<div class="form-group col-md-3">
    <label for="discount_percentage">折扣百分比(%)</label>
    <input type="number" id="discount_percentage" name="discount_percentage" class="form-control">
</div>

<div class="form-group col-md-3">
    <label for="discount">折扣金额</label>
    <input type="number" id="discount" name="discount" class="form-control" readonly>
</div>

2. 添加前端计算逻辑

把以下JS代码放到页面</body>标签前即可实现实时计算效果:

// 获取三个输入框DOM元素
const salePriceInput = document.getElementById('sale_price');
const discountPercentInput = document.getElementById('discount_percentage');
const discountInput = document.getElementById('discount');

// 折扣计算函数
function calcDiscount() {
    // 取不到值默认设为0避免计算结果为NaN
    const price = parseFloat(salePriceInput.value) || 0;
    const percent = parseFloat(discountPercentInput.value) || 0;
    const discount = (price * percent) / 100;
    // 金额默认保留两位小数
    discountInput.value = discount.toFixed(2);
}

// 绑定输入事件,值变化时自动触发计算
salePriceInput.addEventListener('input', calcDiscount);
discountPercentInput.addEventListener('input', calcDiscount);

如果你的项目已经引入jQuery,可以用更简化的写法:

$(function() {
    $('#sale_price, #discount_percentage').on('input', function() {
        const price = parseFloat($('#sale_price').val()) || 0;
        const percent = parseFloat($('#discount_percentage').val()) || 0;
        $('#discount').val(((price * percent)/100).toFixed(2));
    });
});

3. 修正后端控制器代码

你现有控制器代码有两个问题需要调整:

  • 调试用的dd($request->all())会中断请求执行,正式使用需要删除
  • 计算折扣时直接使用了未定义的$sale_price和$discount_percentage变量,会触发报错,修改后代码如下:
public function store(Request $request){
    $presupuestoProducto = new PresupuestoProducto();
    $presupuestoProducto->sale_price = $request->sale_price;
    $presupuestoProducto->discount_percentage = $request->discount_percentage;
    // 从请求对象中获取参数计算
    $presupuestoProducto->discount = ($request->sale_price * $request->discount_percentage)/100;
    $presupuestoProducto->save();
    Session::flash('success');
    return redirect()->route('presupuestos-productos.view');
}

内容的提问来源于stack exchange,提问作者matuco1998

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 01:51:02