<div class="parent">
<div class="child">
<select class="select">
<option value="" selected disabled>List</option>
<option value="1">1</option>
<option value="2">2</option>
</select>
<select class="select">
<option value="" selected disabled>List</option>
<option value="1">1</option>
<option value="2">2</option>
</select>
<button class="button">get</button>
<div class="error"></div>
</div>
</div>
<button class="add">add select</button>
<div class="info"></div>
<div class="card"></div>
const button = document.querySelector('.button')
const parent = document.querySelector(".parent")
const error = document.querySelector('.error')
const select = document.querySelectorAll('.select')
const card = document.querySelector('.card')
//клик на get
parent.addEventListener('click', function(e) {
if (e.target.classList.contains("remove")) {
e.target.parentNode.remove();
return
}
if (!e.target.classList.contains('button')) return
let parentBlock = e.target.closest('.parent')
let childBlock = parentBlock.querySelectorAll('.select')
let ok = true
childBlock.forEach((opt) => {
let option = opt.options[opt.selectedIndex];
if (option.disabled) {
opt.classList.add("input-error");
ok = false
} else if ([...document.querySelectorAll('.select')].every(x => x.value)) {
opt.classList.remove("input-error");
render() //должно выводиться в соответствии с количеством узлов child, а не итераций по select
} else {
card.innerHTML = ''
}
});
error.innerHTML = ok ? "" : 'Выберите информацию из выпадающих списков'
function render() {
console.log('render')
}
})
//клик на add select
const child = document.querySelector(".child")
const add = document.querySelector(".add")
add.addEventListener("click", function() {
child.insertAdjacentHTML(
"afterend",
`<div class="child">
<select class="select">
<option value="" disabled selected>List</option>
<option value="3">3</option>
<option value="4">4</option>
</select>
<select class="select">
<option value="" disabled selected>List</option>
<option value="5">5</option>
<option value="6">6</option>
</select>
<span class="remove">X</span>
</div>`
);
});
let childBlock = parentBlock.querySelectorAll('.select');
let childBlocks = parentBlock.querySelectorAll('.child');
childBlocks.forEach(child) =>
{
// контекст одного элемента child
let childSelects = child.querySelectorAll('.select');
childSelects.forEach((select) =>
{
// контекст одного элемента select
...
// конец контекста одного элемента select
});
// конец контекста одного элемента child
});
let childSelects = e.target.querySelectorAll('.select');
childSelects.forEach((select) =>
{
// контекст одного элемента select
...
// конец контекста одного элемента select
});