themeleaf+ajax实现多选框改变span标签内容以及获取多选框内容

今天在写项目的时候需要写一个这样的
在这里插入图片描述
当我勾选了之后商品总价会根据勾选的内容变化,并且点击确认结算后可以获取已勾选行中需要的内容

一开始我是这样写的

1.复选框

<input class="goodsbox" name="checkbox"  th:name="${list.tbGoodsdetail.getTotalPrice()}" type="checkbox" th:value="${list.getCarId()}" />

2.确认结算按钮ajax

    $(function() {
//获取所有复选框
        $("#buyButton").click(function() {
            text = $("input:checkbox[name='checkbox']:checked").map(function() {
                return $(this).val();
            }).get();
            alert(text)
            $.post("/shopcar/selectGoods",{"carId":text},function () {
                if(data.state==200){
                location.href="/BuyCar_2"
                }else{
                    alert(data.msg);
                }
            })
        });
    });

这样写输出的text是一个以逗号分割的字符串

3.计算价格并显示到页面上(复选框点击事件)

<script>
    $(".goodsbox").click(function () {
        var checkbox=false;
        var span = $("#totalprice").html();
        if(this.checked==true) {
            checkbox=true;
        }
        var cariddata = $("#databox").val();
        var goodsprice = $(this).attr("name");
        if(checkbox) {
            $.post("/shopcar/addprice",{"goodsprice":goodsprice,"totalprice":span},function (data) {
                if(data.state==200){
                    $("#totalprice").html(data.msg);
                }else{
                    alert(data.msg);
                }
            })
        }else{
            $.post("/shopcar/minusprice",{"goodsprice":goodsprice,"totalprice":span},function (data) {
                if(data.state==200){
                    $("#totalprice").html(data.msg);
                }else{
                    alert(data.msg);
                }
            })
        }
    })
</script>

然而。。。
这样写在复选框里会有两个name!!
然后确认结算按钮事件就用不了了
所以我只好改了一下,在计算价格(复选框点击事件)就将需要的内容拼接到一个hidden的文本框里,在确认结算按钮的点击事件里就直接把文本框的内容读取并传到后台

改了之后就是这样

修改后

隐藏的文本框和复选框

<input  id="databox" type="hidden" >
<input class="goodsbox"  th:name="${list.getCarId()}" type="checkbox" th:value="${list.tbGoodsdetail.getGOldPrice()}" />

计算价格(复选框点击事件)

<script>
    $(".goodsbox").click(function () {
        var checkbox=false;
        var span = $("#totalprice").html();
        var object = $(this);
        if(this.checked==true) {
            checkbox=true;
        }
        var cariddata = $("#databox").val();
        var goodsprice = $(this).attr("value");
        if(checkbox) {
            $.post("/shopcar/addprice",{"goodsprice":goodsprice,"totalprice":span},function (data) {
                if(data.state==200){

                    $("#totalprice").html(data.msg);
                    var finalid = cariddata+','+object.attr("name");
                    $("#databox").val(finalid);
                }else{
                    alert(data.msg);
                }
            })
        }else{
            $.post("/shopcar/minusprice",{"goodsprice":goodsprice,"totalprice":span},function (data) {
                if(data.state==200){
                    $("#totalprice").html(data.msg);
                    var removeid = ','+object.attr("name");
                    var finalid = cariddata.replace(removeid,'');
                    $("#databox").val(finalid);
                }else{
                    alert(data.msg);
                }
            })
        }
    })
</script>

首先确定当前该复选框是选中或者取消选中,如果是选中将checkbox置为true。并执行addprice,进行价格计算以及拼接字符串。反之执行minusprice,计算价格,将字符串移除。
结算按钮点击事件

    $(function() {
//获取所有复选框
        $("#buyButton").click(function() {
            var carId = $("#databox").val();
            if(carId==''){
                alert("暂未选择商品")
                return;
            }
            $.post("/shopcar/selectGoods",{"carId":carId},function () {
                if(data.state==200){

                    alert("可以了")
                }else{
                    alert(data.msg);
                }
            })
        });
    });

完成了之后效果就是这样的:
一开始:
在这里插入图片描述
选中两条数据
在这里插入图片描述
取消选中一条数据后
在这里插入图片描述
点击确认结算
在这里插入图片描述
获取的数据后台用split分割就行

如果有好的方法或者有改进的地方欢迎各位大佬在评论区指出T T

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值