Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 未分配:{ allNamesSelected(){ 返回this.names.length==this.selectedNames.length; }, }, 方法:{ selectAll(){ 如果(已选择此.allnames){ this.selectedNames=[]; }否则{ this.selectedNames=this.names.slice(); } }, 已检查(名称){ 返回此.selectedNames.includes(名称); } } }_Javascript_Checkbox - Fatal编程技术网

Javascript 未分配:{ allNamesSelected(){ 返回this.names.length==this.selectedNames.length; }, }, 方法:{ selectAll(){ 如果(已选择此.allnames){ this.selectedNames=[]; }否则{ this.selectedNames=this.names.slice(); } }, 已检查(名称){ 返回此.selectedNames.includes(名称); } } }

Javascript 未分配:{ 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

通常不需要在表格下方显示所选ID。在这种情况下,上述代码可简化为:

HTML


基本上与@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);
    }
  }
})