Javascript 未分配:{ allNamesSelected(){ 返回this.names.length==this.selectedNames.length; }, }, 方法:{ selectAll(){ 如果(已选择此.allnames){ this.selectedNames=[]; }否则{ this.selectedNames=this.names.slice(); } }, 已检查(名称){ 返回此.selectedNames.includes(名称); } } }
通常不需要在表格下方显示所选ID。在这种情况下,上述代码可简化为: HTMLJavascript 未分配:{ allNamesSelected(){ 返回this.names.length==this.selectedNames.length; }, }, 方法:{ selectAll(){ 如果(已选择此.allnames){ this.selectedNames=[]; }否则{ this.selectedNames=this.names.slice(); } }, 已检查(名称){ 返回此.selectedNames.includes(名称); } } },javascript,checkbox,Javascript,Checkbox,通常不需要在表格下方显示所选ID。在这种情况下,上述代码可简化为: HTML 基本上与@Rifki的答案相同,但检查两个元素中是否都存在每个元素,而不仅仅是长度 newvue({ el:“#应用程序”, 数据:{ 用户:[{ “id”:“1”, “名称”:“Shad Jast”, “电子邮件”:“pfeffer。matt@yahoo.com" }, { “id”:“2”, “姓名”:“Duane Metz”, “电子邮件”:“穆罕默德。ferry@yahoo.com" }, { “id”:“3
基本上与@Rifki的答案相同,但检查两个元素中是否都存在每个元素,而不仅仅是长度
newvue({
el:“#应用程序”,
数据:{
用户:[{
“id”:“1”,
“名称”:“Shad Jast”,
“电子邮件”:“pfeffer。matt@yahoo.com"
},
{
“id”:“2”,
“姓名”:“Duane Metz”,
“电子邮件”:“穆罕默德。ferry@yahoo.com"
},
{
“id”:“3”,
“姓名”:“Myah Kris”,
“电子邮件”:evolkman@hotmail.com"
},
{
“id”:“4”,
“姓名”:“Kamron Wunsch博士”,
“电子邮件”:lenora95@leannon.com"
}
],
选定:[]
},
计算:{
选择全部:{
得到(){
如果(this.users&&this.users.length>0){//users数组至少存在一个项
让allChecked=true;
for(此.users的常量用户){
如果(!this.selected.includes(user.id)){
allChecked=false;//如果数组中没有包含一个
}
//如果已发现不匹配,则中断循环
如果(!ALL CHECKED)中断;
}
返回所有已检查的项目;
}
返回false;
},
设置(值){
检查常量=[];
如果(值){
this.users.forEach((用户)=>{
选中。推送(user.id);
});
}
此项已选择=已选中;
}
},
}
});代码>
使用者
名称
{{user.name}
这里是仅使用v型和计算的最简单的解决方案。无需额外的阵列,@单击,:已选中
HTML
<div id="app">
<h4>Users</h4>
<div>
<table>
<tr>
<th>Name</th>
<th>Select <input type="checkbox" @click="selectAll"></th>
</tr>
<tr v-for="user in users">
<td>{{ user.name }}</td>
<td><input type="checkbox" v-model="selected" value="{{ user.id }}"></td>
</tr>
</table>
</div>
<span>Selected Ids: {{ selected| json }}</span>
</div>
<div id="app">
<h4>User</h4>
<div>
<table>
<tr>
<th>Name</th>
<th>Select <input type="checkbox" @click="selectAll" v-model="allSelected"></th>
</tr>
<tr v-for="user in users">
<td>{{ user.name }}</td>
<td><input type="checkbox" v-model="userIds" value="{{ user.id }}"></td>
</tr>
</table>
</div>
<span>Selected Ids: {{ userIds | json }}</span>
</div>
<div id="app">
<input type="checkbox" v-model="allSelected"> Select All
<ul>
<li v-for="user in users">
<input type="checkbox" v-model="user.selected"> {{ user.name }}
</li>
</ul>
<button @click="getSelectedUsers">Get Selected Users</button>
</div>
请注意,您需要属性user.selected从一开始就存在(例如,如果您从API或其他地方加载数据)
工作示例:谢谢您的回复。这对于选择所有值非常有效,但是取消选择怎么样?我猜我可以检查所选的全部是真是假,如果为假,则从所选中删除全部?我要试试你的小提琴。哇!好了,我会更新你的答案,希望没问题吧?已更新您的解决方案。谢谢你的帮助,朋友们:1)全选;2) 取消选择一项。SelectAll复选框应该变为未选中状态。@Sigma很好,我给小提琴添加了一个补丁,也许不是一个很好的解决方案,但它很有效。请随意发布您自己的解决方案。在方法selectAll中,它应该是“if(this.allSelected)”而不是“if(!this.allSelected)”。没有必要使用。我猜它依赖于每个数据项都有'checked':false
?this.selectAll=!选择
是不必要的,因为this.selectAll将始终取决于是否已检查所有用户的已检查属性~非常智能且干净的解决方案:)谢谢。p、 s.首先选择this.selected=已选择;是redudant@KarolFiturski啊,是的,谢谢提醒,我会更新的。user.id.toString()你真的救了我的命。3个小时的闲逛谢谢。这是一个聪明而简洁的解决方案。然而,我只有一个疑问。为什么setter需要是计算属性。这难道不能仅仅是一个更新选中[]状态的方法吗?对于任何想要检查两个元素中是否都存在所有元素的人,而不仅仅是在取消选中父复选框时检查长度的人,所有子复选框都将被取消选中。您是否可以更新您的答案Vue版本“^2.6.10”,也许我误解了您的意思,但这正是所问问题的预期结果。
<div id="app">
<h4>User</h4>
<div>
<table>
<tr>
<th>Name</th>
<th>Select <input type="checkbox" @click="selectAll" v-model="allSelected"></th>
</tr>
<tr v-for="user in users">
<td>{{ user.name }}</td>
<td><input type="checkbox" v-model="userIds" value="{{ user.id }}"></td>
</tr>
</table>
</div>
<span>Selected Ids: {{ userIds | json }}</span>
</div>
new Vue({
el: '#app',
data: {
users: [
{ "id": "1", "name": "Shad Jast", "email": "pfeffer.matt@yahoo.com"},
{ "id": "2", "name": "Duane Metz", "email": "mohammad.ferry@yahoo.com"},
{ "id": "3", "name": "Myah Kris", "email": "evolkman@hotmail.com"},
{ "id": "4", "name": "Dr. Kamron Wunsch", "email": "lenora95@leannon.com"},
{ "id": "5", "name": "Brendon Rogahn", "email": "verlie.buckridge@yahoo.com"}
],
selected: [],
allSelected: false,
userIds: []
},
methods: {
selectAll: function() {
this.userIds = [];
if (!this.allSelected) {
for (user in this.users) {
this.userIds.push(this.users[user].id);
}
}
},
}
})
selectAll: function (isSelected) {
if (!isSelected) {
this.ids = []
return false
}
if (isSelected) {
this.rows.map(item => this.ids.push(item.id))
}
}
<template>
<div align="left">
<div>
<input type="checkbox" id="all" :checked="allNamesSelected" @click="selectAll()">
<label for="all">All</label>
</div>
<div v-for="(name) in names" :key="name">
<input type="checkbox" :id="name" :value="name" :check="isChecked(name)" v-model="selectedNames">
<label :for="name">{{name}}</label>
</div>
</div>
</template>
<script>
export default {
data() {
return {
names: ['Automotive', 'Beauty', 'Branding', 'B to B'],
selectedNames: [],
};
},
computed: {
allNamesSelected() {
return this.names.length == this.selectedNames.length;
},
},
methods: {
selectAll() {
if (this.allNamesSelected) {
this.selectedNames = [];
} else {
this.selectedNames = this.names.slice();
}
},
isChecked(name) {
return this.selectedNames.includes(name);
}
}
}
</script>
<div id="app">
<h4>Users</h4>
<div>
<table>
<tr>
<th>Name</th>
<th>Select <input type="checkbox" v-model="selectAll"></th>
</tr>
<tr v-for="user in users">
<td>{{ user.name }}</td>
<td><input type="checkbox" :value="user.id" :checked="selectAll"></td>
</tr>
</table>
</div>
</div>
new Vue({
el: '#app',
data: {
users: [
{ "id": "1", "name": "Shad Jast", "email": "pfeffer.matt@yahoo.com"},
{ "id": "2", "name": "Duane Metz", "email": "mohammad.ferry@yahoo.com"},
{ "id": "3", "name": "Myah Kris", "email": "evolkman@hotmail.com"},
{ "id": "4", "name": "Dr. Kamron Wunsch", "email": "lenora95@leannon.com"},
{ "id": "5", "name": "Brendon Rogahn", "email": "verlie.buckridge@yahoo.com"}
],
selectAll: false
}
})
<div id="app">
<input type="checkbox" v-model="allSelected"> Select All
<ul>
<li v-for="user in users">
<input type="checkbox" v-model="user.selected"> {{ user.name }}
</li>
</ul>
<button @click="getSelectedUsers">Get Selected Users</button>
</div>
new Vue({
el: "#app",
data: {
users: [
{
id: 1,
name: "Alda Myrrhine",
selected: false,
},
{
id: 2,
name: "Amrita Rabi",
selected: false,
},
{
id: 3,
name: "Ruza Alannah",
selected: false,
},
]
},
computed: {
allSelected: {
set (selected) {
this.users.forEach(function (user) {
user.selected = selected;
});
},
get () {
return this.users.every(function (user) {
return user.selected;
});
}
}
},
methods: {
getSelectedUsers () {
let users = this.users.filter((user) => {
return user.selected;
});
console.log(users);
}
}
})