Я пытаюсь установить и снять все флажки с помощью 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
}
}
Спасибо за ридми и извините за мой плохой английский
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. Или я что-то упускаю?
Создайте поле для каждого valor
элемента, например item.checked
, и вставьте его в v-model
, например это
Кстати, ни в коем случае избегайте использования вариантов vanilla.js в vue.js, это самая основная причина существования такой структуры.
При работе с формами во внешнем интерфейсе нам часто нужно синхронизировать состояние элементов ввода формы с соответствующим состоянием в JavaScript. Может быть обременительно вручную подключать привязки значений и изменять прослушиватели событий.
спасибо за ваш ответ, я добавляю v-model в свой флажок и создаю const для своего события, потому что я использую API композиции, но в консоли я могу показать: доступ к свойству «checked» был получен во время рендеринга, но не определено в экземпляре. обновил мой вопрос
Я не очень хорошо понял ваш вопрос, но если я предполагаю, что вы хотите добавить родительский элемент при изменении его состояния, вы хотите, чтобы все дочерние элементы имели одинаковое состояние
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 :)
Спасибо за ваш ответ. Я обновил свой вопрос, и если я зарегистрируюсь, если мой флажок установлен, он отмечен сейчас, ни один флажок не установлен