Задать вопрос
@SergeiB

Как показать/скрыть блок при совпадении нескольких условий?

Есть несколько полей ввода чисел и блок:

<input type="number" min="10" max="20" placeholder="10">
<input type="number" min="5" max="10" placeholder="5">
<input type="number" min="7" max="15" placeholder="7">
<div class="block">Hello, world!</div>

Нужно показывать блок, если хотя бы одно из них имеет значение, отличное от минимального, и скрывать блок, если все пустые или имеют минимальные значения. Вроде всё просто, но решение на ум не идёт.
  • Вопрос задан
  • 134 просмотра
Подписаться 1 Простой Комментировать
Решения вопроса 2
hzzzzl
@hzzzzl
let hideBlock = true

document.querySelectorAll('input')
	.forEach(input => {
		// console.log(input.min, input.max, input.value)
		if (input.value && +input.value > +input.min) 
			hideBlock = false
	})
 
if (hideBlock) {
	document.querySelector('.block').style.display = 'none'
} else {
	document.querySelector('.block').style.display = 'block'
}
Ответ написан
0xD34F
@0xD34F Куратор тега JavaScript
const block = document.querySelector('.block');
const inputSelector = 'input[type="number"]';

const toggleBlock = () =>
  block.style.display = Array
    .from(document.querySelectorAll(inputSelector))
    .some(n => n.value && +n.value > +n.min)
      ? 'block'
      : 'none';

document.addEventListener('input', e => e.target.matches(inputSelector) && toggleBlock());
toggleBlock();

// или

const inputs = document.querySelectorAll(inputSelector);
const toggleBlock = () =>
  block.hidden = Array.prototype.every.call(
    inputs,
    n => !n.value || +n.value <= +n.min
  );

inputs.forEach(n => n.addEventListener('input', toggleBlock));
toggleBlock();
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы