请求:基于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
相关产品推荐
相关产品推荐

