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

请求:基于jQuery实现足球赛事复选框选中的费用动态指数计算

解决方案:实现足球赛事复选框选中后的指数式费用计算

首先得先指出你现有代码里的几个关键问题,这些会直接影响功能实现:

  • HTML里嵌套了两层<form>标签,这是无效的HTML结构,需要移除内层的<form>
  • 所有复选框都用了同一个id="exampleCheck1",id必须是唯一的,这里可以直接去掉id(因为我们用class就能完成选择)
  • 只有第一个复选框设置了value,其他两个没有,得给每个选项设置对应的赔率值(比如主队胜、平局、客队胜各自的赔率)
  • 缺少每场赛事的分组标识,没法单独计算单场选中项的乘积

接下来是修正后的完整代码和功能实现:

第一步:修复HTML&PHP结构

我们给每场赛事的行添加match-row类,给每个复选框绑定对应赔率的value,同时清理无效的嵌套标签:

<form method="POST">
  <div class="form-group mt-4">
    <div class="w-100 p-3">
      <table class="table">
        <thead class="thead-dark">
          <tr>
            <th class="text-center" scope="col"></th>
            <th class="text-center" scope="col">主队</th>
            <th class="text-center" scope="col">平局</th>
            <th class="text-center" scope="col">客队</th>
            <th class="text-center" scope="col"></th>
          </tr>
        </thead>
        <tbody>
          <?php 
          $get_teams1 = "SELECT * FROM teams WHERE show_match=1 ORDER BY team_id DESC";
          $get_teams2 = mysqli_query($conn, $get_teams1);
          while($get_teams3 = mysqli_fetch_assoc($get_teams2)) {
              // 这里假设从数据库读取各选项的赔率,你可以替换成实际字段
              $home_odds = $get_teams3["home_odds"] ?? 2.0;
              $draw_odds = $get_teams3["draw_odds"] ?? 3.2;
              $away_odds = $get_teams3["away_odds"] ?? 2.8;
              echo '
              <tr class="match-row">
                <td class="text-right">
                  <input type="checkbox" class="qty1 form-check-input" value="'.$home_odds.'">
                </td>
                <td class="text-center">'.$get_teams3["mizban"].'</td>
                <td class="text-center">
                  <input type="checkbox" class="qty1 form-check-input" value="'.$draw_odds.'">
                </td>
                <td class="text-center">'.$get_teams3["mihman"].'</td>
                <td class="text-right">
                  <input type="checkbox" class="qty1 form-check-input" value="'.$away_odds.'">
                </td>
              </tr>
              ';
          }
          ?>
        </tbody>
      </table>
      <div class="mt-3">
        <label>总费用:</label>
        <input type="text" class="total" value="0" readonly />
      </div>
      <button type="submit" class="btn btn-dark mt-2 w-100" name="register3">
        <h5>ثبت فرم</h5>
      </button>
    </div>
  </div>
</form>

第二步:编写jQuery实现指数增长计算

核心逻辑是:每一场赛事中,选中的选项赔率相乘得到该场的贡献值;所有场次的贡献值再相乘,得到总费用,这样单场选2个或3个选项时,总费用会呈指数增长,完全符合你的需求:

<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script>
$(document).ready(function(){
    // 监听复选框变化事件
    $(document).on("change", ".qty1", calculateTotalCost);

    // 页面加载时先初始化计算一次
    calculateTotalCost();

    function calculateTotalCost() {
        let total = 1; // 乘法初始值设为1,不影响乘积结果

        // 遍历每一场赛事
        $(".match-row").each(function(){
            let matchMultiplier = 1;
            // 获取当前场次中被选中的复选框
            $(this).find(".qty1:checked").each(function(){
                // 将选中的赔率相乘
                matchMultiplier *= parseFloat($(this).val());
            });
            // 只有该场有选中选项时,才将贡献值乘入总费用
            if(matchMultiplier !== 1) {
                total *= matchMultiplier;
            }
        });

        // 没有选中任何选项时,总费用设为0
        total = total === 1 ? 0 : total;
        // 保留两位小数,更新到输入框
        $(".total").val(total.toFixed(2));
    }
});
</script>

逻辑说明:

  • 用乘法替代加法实现指数增长:比如单场选2个赔率2.0和3.2,该场贡献6.4;另一场选3个1.8、3.0、2.5,贡献13.5;总费用就是6.4×13.5=86.40
  • 单场未选中任何选项时,贡献值为1,不会影响总费用的计算
  • 最终结果保留两位小数,更贴合金额类数据的显示习惯

额外提示

  • 你可以根据实际业务调整赔率的来源(比如从数据库读取真实赛事的赔率数据)
  • 如果需要设置最低投注金额,可以在计算完成后添加判断逻辑
  • 浮点数精度问题可以通过toFixed(2)处理,避免显示异常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 06:24:14