Как вернуть все элементы с querySelectorAll

391
01 декабря 2017, 07:26

У меня есть 5 инпута, нужно сделать так, чтобы если одно из них не заполнить, то сообщение не должно быть отправлено.

document.querySelector(".btn-info").addEventListener("click", function(){ 
	var required = document.querySelectorAll(".required"); 
	if (required.val == "") { 
		alert("please fill all the columns"); 
	} 
 
});
.required { 
  display:block; 
  padding-bottom:10x; 
}
<form id="fld"> 
  <input id="question1" class="required"> 
  <input id="question2" class="required"> 
  <input id="question3" class="required"> 
  <input id="question4" class="required"> 
  <input id="question5" class="required"> 
</form> 
 <button type="button" class="btn btn-info">Отправить отзыв</button>

Answer 1

Так как querySelectorAll возвращает коллекцию элементов, то проверка required.val == "" бессмысленна, ибо берется val (которого и одиночного-то элемента нет), которого в коллекции нет. Соответственно можно пробежать по коллекции и просмотреть значение value у элементов:

document.querySelector(".btn-info").addEventListener("click", function(){ 
    let required = document.querySelectorAll(".required"); 
    let isAllFilled = true; 
   
    for (let i = 0; i < required.length; ++i) { 
        if (required[i].value.trim() == "") { 
            isAllFilled = false; 
            break; 
	} 
    } 
   
    if (!isAllFilled) 
        alert("please fill all the columns"); 
});
.required { 
  display:block; 
  padding-bottom:10x; 
}
<form id="fld"> 
  <input id="question1" class="required"> 
  <input id="question2" class="required"> 
  <input id="question3" class="required"> 
  <input id="question4" class="required"> 
  <input id="question5" class="required"> 
</form> 
 <button type="button" class="btn btn-info">Отправить отзыв</button>

Answer 2

Альтернативным решением может стать использование атрибута required и псевдокласса :invalid в селекторе.

В этом случае достаточно будет проверить, что такие элементы есть.

Пример:

document.querySelector(".btn-info").addEventListener("click", function() { 
  var required = document.querySelectorAll(".required:invalid"); 
  if (required.length) { 
    console.log("please fill all the columns"); 
  } 
 
});
.required { 
  display: block; 
  padding-bottom: 10x; 
}
<form id="fld"> 
  <input id="question1" required class="required"> 
  <input id="question2" required class="required"> 
  <input id="question3" required class="required"> 
  <input id="question4" required class="required"> 
  <input id="question5" required class="required"> 
</form> 
<button type="button" class="btn btn-info">Отправить отзыв</button>

READ ALSO
drag and drop. Расчет формулы

drag and drop. Расчет формулы

Код, к сожалению, приложить не могу

315
Создать фильтр-тест для товаров

Создать фильтр-тест для товаров

Нужно создать фильтр-тест для товаров, есть 3 категории и 3 значения, в итоге 27 значений в зависимости от конфигурацийНа каждое из значений...

253
есть объект, в котором есть массив объектов. Как получить свойство из объекта, который в массиве объектов?

есть объект, в котором есть массив объектов. Как получить свойство из объекта, который в массиве объектов?

Есть объект:clusterDefinition, у которого есть свойство serverRef и привязанные к нему напрямую свойства port и ip, также в serverRef есть массив объектов, у которых...

190
Что означает символ @ в javascript?

Что означает символ @ в javascript?

Что означает символ @ в javascript/jQuery?

239