当没有商品选中时则不能提交表单,支持全选全不选
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<link rel="stylesheet" href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css" />
<style>
.table{
margin-top: 100px;
}
</style>
</head>
<body>
<div class="container hidden" id="app">
<table class="table table-striped table-bordered">
<tr>
<th>#</th>
<th><input type="checkbox" v-model="checkedAll" v-on:click="checkAll()" />全选</th>
<th>商品</th>
<th>单价</th>
<th style="width: 120px;">数量</th>
<th>小计</th>
<th>操作</th>
</tr>
<tr v-for="(item,index) in goods">
<td>{{index}}</td>
<td><input type="checkbox" v-model="item.checked" v-on:click="checkbox()" /></td>
<td>{{item.name}}</td>
<td>{{item.price}}</td>
<td>
<div class="input-group">
<span class="input-group-addon" v-on:click="reduce(index)">-</span>
<input type="text" class="form-control" aria-label="Amount (to the nearest dollar)" v-model="item.num">
<span class="input-group-addon" v-on:click="add(index)">+</span>
</div>
</td>
<td>{{item.num*item.price}}</td>
<td><button type="button" class="btn btn-danger" v-on:click="modal(index)">删除</button></td>
</tr>
<tr>
<td>总价</td>
<td colspan="5">{{totalPrice}}</td>
<td><button type="button" class="btn btn-danger" v-on:click="modal(-2)">清空购物车</button></td>
</tr>
</table>
<button type="button" class="btn btn-danger" v-bind:class="{disabled:!submit}" v-on:click="onsubmit()">提交订单</button>
<!--弹出框-->
<div class="modal fade" id="mymodal" tabindex="-1" role="dialog">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
<h4 class="modal-title">提示</h4>
</div>
<div class="modal-body">
<p>确定要删除{{removegood}}吗?</p>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">取消</button>
<button type="button" class="btn btn-danger" data-dismiss="modal" v-on:click="remove(nowIndex)">确定</button>
</div>
</div>
<!-- /.modal-content -->
</div>
<!-- /.modal-dialog -->
</div>
</div>
<script src="http://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script>
<script src="http://apps.bdimg.com/libs/bootstrap/3.3.4/js/bootstrap.min.js"></script>
<script src="https://unpkg.com/vue/dist/vue.js"></script>
<script>
var app = new Vue({
el:"#app",
data:{
totalPrice:0, //总金额
nowIndex:-10, //控制弹窗
removegood:'', //要删除的物品
checkedAll:false, //全选
submit:false, //提交,true为可以提交,false为不能提交
goods:[
{
id:'001',
checked:false,
name:"javascript",
price:120,
num:1
},
{
id:'002',
checked:false,
name:"java",
price:100,
num:1
},
{
id:'003',
checked:false,
name:"php",
price:110,
num:1
}
]
},
methods: {
add: function(index){ //数量增加
this.goods[index].num++;
},
reduce: function(index){ //数量减少
var vm = this;
vm.goods[index].num--;
if(vm.goods[index].num < 1){
vm.goods[index].num = 1;
vm.modal(index);
}
},
modal: function(index){ //弹窗
var vm = this;
vm.nowIndex = index;
if(index >= 0){
vm.removegood = vm.goods[index].name;
}else{
vm.removegood = "购物车全部商品"
}
$("#mymodal").modal();
},
remove: function(n){ //判断是删除一个商品还是清空购物车
if(n == -2){
this.goods = [];
return;
}
this.goods.splice(n,1);
},
checkAll: function(){ //全选
var vm = this;
vm.goods.forEach(function(element) {
if(vm.checkedAll){
element.checked = true;
vm.submit = true;
} else{
element.checked = false;
vm.submit = false;
}
});
},
checkbox: function () { //选中某一个商品,如果全部选中则 checkedAll 为true,如果一个都没选中则不能提交订单
var vm = this;
var len = vm.goods.length;
var n = 0;
for (var i = 0; i < len; i++) {
if(vm.goods[i].checked){
n++;
if(n == len){
vm.checkedAll = true;
} else{
vm.checkedAll = false;
}
}
}
if (n > 0) {
vm.submit = true;
} else {
vm.submit = false;
}
},
onsubmit: function(){ //提交订单,需要判断是否有选中的商品
if(this.totalPrice == 0){
console.log("请选择要购买的商品")
return false;
}
console.log(JSON.stringify(this.goods))
}
},
computed: { //计算总金额
totalPrices: function(){
var total = 0;
this.goods.forEach(function(mes){
if(mes.checked){
total += mes.num*mes.price
}
})
this.totalPrice = total;
return this.totalPrice;
}
},
watch:{ //实时观察金额是否有变化
totalPrices: function(newValue, oldValue){
return this.totalPrice = newValue;
}
},
mounted: function(){ //为了防止闪屏,数据渲染后再显示DOM
$("#app").removeClass("hidden");
}
})
</script>
</body>
</html>
欢迎分享本文,转载请保留出处:前端ABC » vue小练习—购物车
前端ABC