用vue做一个多选的功能,另外用户可以也可以不选,但是至少要选择一个才能提交
.item(v-for="(item,index) in taxData.caijing"
@click="taxDataForm.push({caijing: 'item'})") {{item}}
点击push进去数组还是报错
用vue做一个多选的功能,另外用户可以也可以不选,但是至少要选择一个才能提交
.item(v-for="(item,index) in taxData.caijing"
@click="taxDataForm.push({caijing: 'item'})") {{item}}
点击push进去数组还是报错
额,这名字取得也挺有意思
computed: {
disabled () {
return (!this.a && !this.b && !this.c)
}
},
methods: {
handlerA (val) {
this.a = val
},
handlerB (val) {
this.b = val
},
handlerC (val) {
this.c = val
}
}
写了个小demo,具体判断你可以自己参考一下
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>JS Bin</title>
<script src="https://cdn.bootcss.com/vue/2.5.13/vue.min.js"></script>
<style>
span{display:inline-block; margin-right:10px; border:1px solid #000;}
span.active{border:1px solid red;}
</style>
</head>
<body>
<div id="app">
<div v-for="(item,index) in list">
{{item.name}}
<div>
<span v-for="(itemB,indexB) in item.datas" @click="check(index,indexB)" :class={'active':itemB.isCheck}>{{itemB.name}} {{itemB.isCheck}}</span>
</div>
</div>
<button @click="submit">打印选择结果</button>
</div>
<script>
var app = new Vue({
el:'#app',
data(){
return{
list:[
{name:'财经新闻',datas:[{name:'股票'},{name:'科技'},{name:'产业'}]},
{name:'热点聚焦',datas:[{name:'股票'},{name:'科技'},{name:'产业'}]},
{name:'行业资讯',datas:[{name:'股票'},{name:'科技'},{name:'产业'}]},
],
results:{}
}
},
mounted(){
this.list.map((v,i)=>{
v.datas.map((val,index)=>{
this.$set(val,'isCheck',false);
})
});
},
methods:{
check(index,indexB){
let data = !this.list[index].datas[indexB].isCheck
this.$set(this.list[index].datas[indexB],'isCheck',data);
if(data){
if(typeof(this.results[index]) == 'undefined') this.results[index] = [];
this.results[index].push(this.list[index].datas[indexB].name);
}else{
let rIndex = this.results[index].indexOf(this.list[index].datas[indexB].name);
this.results[index].splice(rIndex,1)
}
},
submit(){
this.list.map((v,i)=>{
if(typeof(this.results[i]) == 'undefined'){
this.results[i] = [];
}
})
console.log(this.results)
}
}
})
</script>
</body>
</html>
这个需求,最合适用 :checked + label
来做,写个简单的代码范例吧:
.item(v-for="(item,index) in taxData.caijing")
input(type="radio", v-model="caijing", name="caijing", :id="'caijing-' + index")
label(:for="'caijing-' + index") {{item}}
export default {
data() {
return {
caijing: null,
};
},
}
利用 <label>
的特性就可以完成需求,<input>
可以为 radio
也可以为 checkbox
。
题主有时间的话,推荐看下我的文章:纯CSS实现多选组件,以及讲堂 写 CSS 也要开脑洞:万能的 :checked + label
5 回答4.9k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答4.8k 阅读✓ 已解决
4 回答4.4k 阅读✓ 已解决
4 回答1.9k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
绑定3个值
提交的时候判断a,b,c是否至少有一个有值,没有的话就阻止提交