<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<script src="https://cdn.bootcss.com/vue/2.2.2/vue.min.js"></script>
<div id="app">
<p>单选框</p>
<ul>
<li v-for="(item,index) in radioList" :key="index" :class="selectedNum==index?'active':''"
@click="select(index)">{{item}}</li>
</ul>
<p>多选框</p>
<ul>
<li v-for="(item,index) in checkboxList" :key="item" :class="checkbox.includes(index)?'active':''"
@click="check(index)">{{item}}</li>
</ul>
<button @click="letsGetThisFuckingCheck">{{isCheckAll?'取消全选':'选择全部'}}</button>
<button @click="checkOpposite">反选</button>
<button @click="clear">清空</button>
</div>
<script>
var app = new Vue({
el: '#app',
data: {
selectedNum: "",
radioList: ["某个元素", "某个元素", "某个元素", "某个元素", "某个元素"],
checkbox: [],
checkboxList: ["某个元素", "某个元素", "某个元素", "某个元素", "某个元素", "某个元素", "某个元素"],
},
computed: {
isCheckAll() {
if (this.checkbox.length == this.checkboxList.length) {
return true;
}
return false;
}
},
methods: {
select(i) {
this.selectedNum = i;
},
check(i) {
var idx = this.checkbox.indexOf(i);
if (idx > -1) {
this.checkbox.splice(idx, 1);
} else {
this.checkbox.push(i);
}
},
letsGetThisFuckingCheck() {
if (this.isCheckAll) {
this.clearCheckbox();
} else {
this.checkAll()
}
},
checkAll() {
var len = this.checkboxList.length;
this.checkbox = [];
for (var i = 0; i < len; i++) {
this.checkbox.push(i);
}
},
clearCheckbox() {
this.checkbox = [];
},
clear() {
this.checkbox = [];
},
checkOpposite() {
console.log(1)
var len = this.checkboxList.length;
var idx;
for (var i = 0; i < len; i++) {
idx = this.checkbox.indexOf(i)
if (idx > -1) {
this.checkbox.splice(idx, 1);
} else {
this.checkbox.push(i);
}
}
},
},
watch: {
"checkedNames": function () {
if (this.checkedNames.length != this.checkedArr.length) {
this.checked = false
} else {
this.checked = true
}
}
}
})
</script>
</body>
<style>
li {
display: inline-block;
font-size: 16px;
padding: 5px;
background-color: #e6e6e6;
margin: 5px 10px;
cursor: pointer;
}
.active {
border: 2px solid red;
}
</style>
</html>