JavaScript实现全选、反选功能(Vue全选、反选,js原生全选、反选)

缺乏、安全感 2024-04-22 22:30 237阅读 0赞

简介:

  • 在JavaScript中,实现全选和反选通常是通过操作DOM元素和事件监听来实现;

  • 全选功能:当用户点击一个“全选”复选框时,页面中所有具有相同类名的复选框都将被选中;

  • 反选功能:用户点击一个“反选”复选框时,已选中的将变为未选中,未选中的将变为选中。

这里分别用原生JS和Vuejs实现一下

一、JavaScript实现

1、先看效果

af2f3cbb9cf44b2d8926f3638d26ad4f.gif

2、html部分

  1. <div class="test_checks">
  2. <h2>JavaScript原生全选、反选功能</h2>
  3. <input type="checkbox" id="selectAll" /> Select All
  4. <br />
  5. <br />
  6. <input type="checkbox" class="checkbox" /> Item 1
  7. <br />
  8. <input type="checkbox" class="checkbox" /> Item 2
  9. <br />
  10. <input type="checkbox" class="checkbox" /> Item 3
  11. <br />
  12. </div>

3、这里首先为selectAll复选框添加了一个change事件监听器,当用户点击该复选框时,将触发该事件;然后在事件处理函数中,通过遍历所有复选框,将它们的选中状态设置为与selectAll复选框相同的状态

  1. document.getElementById("selectAll").addEventListener("change", function () {
  2. var checkboxes = document.getElementsByClassName("checkbox");
  3. for (var i = 0; i < checkboxes.length; i++) {
  4. checkboxes[i].checked = this.checked;
  5. }
  6. });

4、这里在事件处理函数中,为每个复选框添加了一个change事件监听器。当用户点击某个复选框时,触发该事件。在事件处理函数中,首先设置allChecked变量为true,然后遍历所有复选框,如果发现有复选框没有被选中,将allChecked变量设置为false并跳出循环。最后,将selectAll复选框的选中状态设置为allChecked

  1. var checkboxes = document.getElementsByClassName("checkbox");
  2. for (var i = 0; i < checkboxes.length; i++) {
  3. checkboxes[i].addEventListener("change", function () {
  4. var allChecked = true;
  5. for (var j = 0; j < checkboxes.length; j++) {
  6. if (!checkboxes[j].checked) {
  7. allChecked = false;
  8. break;
  9. }
  10. }
  11. document.getElementById("selectAll").checked = allChecked;
  12. });
  13. }

5、完整代码

  1. <div class="test_checks">
  2. <h2>JavaScript原生全选、反选功能</h2>
  3. <input type="checkbox" id="selectAll" /> Select All
  4. <br />
  5. <br />
  6. <input type="checkbox" class="checkbox" /> Item 1
  7. <br />
  8. <input type="checkbox" class="checkbox" /> Item 2
  9. <br />
  10. <input type="checkbox" class="checkbox" /> Item 3
  11. <br />
  12. </div>
  13. <script>
  14. document
  15. .getElementById("selectAll")
  16. .addEventListener("change", function () {
  17. var checkboxes = document.getElementsByClassName("checkbox");
  18. for (var i = 0; i < checkboxes.length; i++) {
  19. checkboxes[i].checked = this.checked;
  20. }
  21. });
  22. var checkboxes = document.getElementsByClassName("checkbox");
  23. for (var i = 0; i < checkboxes.length; i++) {
  24. checkboxes[i].addEventListener("change", function () {
  25. var allChecked = true;
  26. for (var j = 0; j < checkboxes.length; j++) {
  27. if (!checkboxes[j].checked) {
  28. allChecked = false;
  29. break;
  30. }
  31. }
  32. document.getElementById("selectAll").checked = allChecked;
  33. });
  34. }
  35. </script>

二、Vue.Js实现

1、先看效果

deb3787016ef4b69bbae5b1c20f3cbbf.gif

2、html部分

  1. <div>
  2. <!-- 全选按钮 -->
  3. <input
  4. type="checkbox"
  5. v-model="checkAllFlag"
  6. @change="choseCheckAll"
  7. />
  8. <!-- 可选项目列表 -->
  9. <ul>
  10. <li v-for="(item, index) in items" :key="index">
  11. <input
  12. type="checkbox"
  13. v-model="checkedS"
  14. :value="item.id"
  15. @change="ChoseChecks"
  16. />
  17. {
  18. { item.name }}
  19. </li>
  20. </ul>
  21. </div>

这里为全选按钮绑定一个v-model的checkAllFlag状态,用于存储全选状态;然后为每个可选项目绑定一个v-model的 checkedS属性,它是一个数组,用于存储被选中的项目的ID。

3、然后定义相关的数据类型

  1. data() {
  2. return {
  3. checkAllFlag: false,
  4. checkedS: [],
  5. items: [
  6. { id: 1, name: "Item 1" },
  7. { id: 2, name: "Item 2" },
  8. { id: 3, name: "Item 3" },
  9. { id: 4, name: "Item 4" },
  10. ],
  11. };
  12. },

4、函数部分

  1. methods: {
  2. choseCheckAll() {
  3. this.checkedS = this.checkAllFlag
  4. ? this.items.map((item) => item.id)
  5. : [];
  6. },
  7. ChoseChecks(value) {
  8. if (this.checkAllFlag && value) {
  9. this.checkAllFlag = false;
  10. } else if (
  11. !this.checkAllFlag &&
  12. this.checkedS.length === this.items.length &&
  13. value
  14. ) {
  15. this.checkAllFlag = true;
  16. }
  17. },
  18. },

这里为全选按钮的@change事件choseCheckAll,该方法根据全选状态更新所有项目的选中状态。 每个可选项目的@change事件触发一个方法(如 ChoseChecks),用于更新全选状态,当所有项目都被选中或取消选中时,全选按钮的状态应相应改变。

5、注意事项

choseCheckAll 方法:

  1. 当全选按钮被选中时,将所有项目的ID(this.items.map(item => item.id))赋值给 checkedS,实现全选。
  2. 当全选按钮被取消选中时,将 checkedS 设置为空数组,取消所有项目的选中状态。

ChoseChecks 方法:

  1. 当全选按钮已选中且某个项目被取消选中时,将 checkAllFlag 设置为 false,表示不再全选。
  2. 当全选按钮未选中,且当前选中的项目数量等于总项目数,将 checkAllFlag 设置为 true,表示所有项目已被选中。

6、完整代码

  1. <div class="test_checks">
  2. <input
  3. type="checkbox"
  4. v-model="checkAllFlag"
  5. @change="choseCheckAll"
  6. /><span class="checkll_dom">全选</span>
  7. <ul>
  8. <li v-for="(item, index) in items" :key="index">
  9. <input
  10. type="checkbox"
  11. v-model="checkedS"
  12. :value="item.id"
  13. @change="ChoseChecks"
  14. />
  15. {
  16. { item.name }}
  17. </li>
  18. </ul>
  19. </div>
  20. data() {
  21. return {
  22. checkAllFlag: false,
  23. checkedS: [],
  24. items: [
  25. { id: 1, name: "Item 1" },
  26. { id: 2, name: "Item 2" },
  27. { id: 3, name: "Item 3" },
  28. { id: 4, name: "Item 4" },
  29. ],
  30. };
  31. },
  32. methods: {
  33. choseCheckAll() {
  34. this.checkedS = this.checkAllFlag
  35. ? this.items.map((item) => item.id)
  36. : [];
  37. },
  38. ChoseChecks(value) {
  39. if (this.checkAllFlag && value) {
  40. this.checkAllFlag = false;
  41. } else if (
  42. !this.checkAllFlag &&
  43. this.checkedS.length === this.items.length &&
  44. value
  45. ) {
  46. this.checkAllFlag = true;
  47. }
  48. },
  49. },

创作不易,感觉有用,就一键三连,感谢(●’◡’●)

发表评论

表情:
评论列表 (有 0 条评论,237人围观)

还没有评论,来说两句吧...

相关阅读