4

Looking for a simple way to validate all required inputs, in a certain div. In other words make sure all required inputs within a certain div are not empty.

This following code which was found here, shows a way to check all inputs and make sure they aren't empty (including inputs with only spaces in them) on a given page.

I am trying to do the same thing. Just within a certain div and for all required inputs.

$("input").filter(function () {
    return $.trim($(this).val()).length == 0
}).length == 0;
Community
  • 1
  • 1
akasoggybunz
  • 344
  • 7
  • 21

3 Answers3

4

You could do the same thing, but you should change the selector to target just the input's inside a given div and add [required] selector to select just those who have required attribute :

$("div_selector input[required]").filter(function () {
    return $.trim($(this).val()).length == 0
}).length == 0;

Hope this helps.

$('button').on('click',function(){
  var result = $("#div_selector input[required]").filter(function () {
    return $.trim($(this).val()).length == 0
  }).length == 0;

  console.log(result);
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input name='first' required> Required input out of the div 

<div id='div_selector'>
  <input name='second' required> Required input
  <br>
  <input name='Third'>
  <br>
  <input name='Fourth' required> Required input
</div>
<br>
<button>Check</button>
Zakaria Acharki
  • 66,747
  • 15
  • 75
  • 101
2

Here's a simple one-liner using Array.reduce():

$(".your-div input").reduce((allFilled, input) =>
  allFilled && $.trim($(input).val()) !== "", true)
Rommel Santor
  • 1,021
  • 7
  • 10
  • thank you this is a very slick way of doing it. Does this return a boolean value? – akasoggybunz Dec 30 '16 at 15:46
  • 1
    Yep! The good thing about `Array.reduce()` is you get to define what it ultimately returns. In my example, I pass in `true` as the initial result value, and in each element's callback, we also return a boolean, so the final result will be the same. – Rommel Santor Dec 30 '16 at 15:53
1

This approach will match any input be it input, select, textarea etc

var canSubmit = true;
$.each($('.div-in-question').find(':input'), function(element, index){
    canSubmit = canSubmit && ($(element).val() !== '');
});
// at this point canSubmit will be true or false and you can act upon it
Dale
  • 10,384
  • 21
  • 34