Установить все флажки по имени класса

Я пытаюсь установить и снять все флажки с помощью javascript и vue.

const checkAll = () => {
        var array = document.getElementsByClassName("assign_register");
        for(var i = 0; i < array.length; i++){
            if (array[i].type == "checkbox"){
                if (array[i].className == "assign_register"){
                    array[i].checked = true;
                }else if (array[i].checked){
                    array[i].checked = false;
                }
            }
            
        }
    }

Эта функция вызывается из моего основного флажка:

<template v-for = "item in valor" :key = "item.id">
                    <tr>
                        <td><input type = "checkbox" class = "assign_register" name = "assign_register" style = "width: 20px; height: 20px;"></td>

я хочу сделать, чтобы, когда я нажимаю на этот флажок, проверялись все мои дочерние флажки, и если он отмечен и снимается этот флажок, все снято. я пробовал с событием.

const checkAll = () => {
        var array = document.getElementsByClassName("assign_register");
        for(var i = 0; i < array.length; i++){
            array[i].addEventListener('change', e => {
                if (e.target.checked === true) {
                    console.info("Checkbox is checked - boolean value: ", e.target.checked)
                }
                if (e.target.checked === false) {
                    console.info("Checkbox is not checked - boolean value: ", e.target.checked)
                }
            });
        }
    }

но ничего не показывает в консоли и не проверял мои входы...

ОБНОВЛЯТЬ

const checkAll = () => {
        var array = document.getElementsByClassName("assign_register");
        for(var i = 0; i < array.length; i++){
            if (array[i].type == "checkbox"){
                if (array[i].className == "assign_register"){
                    array[i].checked = true;
                    if (array[i].checked == true){
                        array[i].checked = false;
                    }
                }
            }
        }
    }

ОБНОВЛЕНИЕ 2

<td><input type = "checkbox" class = "assign_register" name = "assign_register" v-model = "checked" style = "width: 20px; height: 20px;"></td>

const checkAll = () => {
        return {
            checked: true
        }
    }

Спасибо за ридми и извините за мой плохой английский

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
76
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

const checkAll = () => {
    var array = document.getElementsByClassName("assign_register");
    for(var i = 0; i < array.length; i++){
        if (array[i].type == "checkbox"){
            if (array[i].className == "assign_register"){
                array[i].checked = true;
            }else if (array[i].checked){
                array[i].checked = false;
            }
        }
        
    }
}

Кажется, что он никогда не переходит в блок else if, потому что if всегда истинно, так как вы получаете только элементы с этим className. Или я что-то упускаю?

Спасибо за ваш ответ. Я обновил свой вопрос, и если я зарегистрируюсь, если мой флажок установлен, он отмечен сейчас, ни один флажок не установлен

scorpions78 17.04.2023 08:30

Создайте поле для каждого valor элемента, например item.checked, и вставьте его в v-model, например это

Кстати, ни в коем случае избегайте использования вариантов vanilla.js в vue.js, это самая основная причина существования такой структуры.

При работе с формами во внешнем интерфейсе нам часто нужно синхронизировать состояние элементов ввода формы с соответствующим состоянием в JavaScript. Может быть обременительно вручную подключать привязки значений и изменять прослушиватели событий.

спасибо за ваш ответ, я добавляю v-model в свой флажок и создаю const для своего события, потому что я использую API композиции, но в консоли я могу показать: доступ к свойству «checked» был получен во время рендеринга, но не определено в экземпляре. обновил мой вопрос

scorpions78 17.04.2023 08:55
Ответ принят как подходящий

Я не очень хорошо понял ваш вопрос, но если я предполагаю, что вы хотите добавить родительский элемент при изменении его состояния, вы хотите, чтобы все дочерние элементы имели одинаковое состояние

document.querySelector('.main_checkbox').addEventListener("change",function(){
    let isChecked=this.checked;
    document.querySelectorAll("input[type='checkbox'].assign_register").forEach((chk)=>{
             chk.checked=isChecked;
    })
})
<div>
  Main Check Box:<input type = "checkbox" class = "main_checkbox" /> Change Me To Change All Other CheckBoxes<br/>
<hr/>
  Child 1:<input type = "checkbox" class = "assign_register" /> <br/>
Child 2:<input type = "checkbox" class = "assign_register" /> <br/>
Child 3:<input type = "checkbox" class = "assign_register" /> <br/>
Child 4:<input type = "checkbox" checked class = "assign_register" /> <br/>
</div>

Хотя это правильно и хорошо работает. Я бы не советовал использовать этот код в сочетании с vue.js :)

Wimanicesir 17.04.2023 09:41

Другие вопросы по теме