Tom
Tom

Reputation: 4577

Loop through all text boxes in a form using jQuery

I have a form which is laid out like a spreadsheet.

I want to validate the text in each textbox and if it's not numeric, change the background of the textbox and display a message.

I can do everything except for the looping part.

I'm guessing it's a for...each statement?

Upvotes: 12

Views: 42557

Answers (5)

CARRION RAYMI KAPAK
CARRION RAYMI KAPAK

Reputation: 1

Got this working for me! :) references

Loop through all text boxes in a form using jQuery & https://stackoverflow.com/a/311589

$(document).ready(function() {
		$('form button[type=submit]').click(function() {
			// attach the listener to your button
			debugger;
			var sub_form = $(this.form);
			// use the native JS object with "this"
			$(':input[class="required"]', sub_form).each(function() {
				if (this.value == "") {
					alert("is empty");
				} else {
					alert(this.value);
				}
			});
		});
	});
body {
  margin: 5px;
  padding: 5px;
  border: 1px solid black;
}
#topContainer {
  width: auto;
  margin: 2px;
  padding: 2px;
  border: 1px solid black;
  height: 100px;
}
#mainContainer {
  width: auto;
  height: 200px;
  margin: 2px;
  padding: 2px;
  border: 1px solid black;
}
#footerContainer {
  width: auto;
  height: 200px;
  margin: 2px;
  padding: 2px;
  border: 1px solid black;
}
.gridRow4 {
  margin: 2px 5px;
  width: 25%;
}
.gridRow5 {
  margin: 2px 5px;
  width: ;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<body>
  <div id="topContainer">
    <h2>text goes here
      </h2>
  </div>
  <div id="mainContainer">
    <form id="form1">
      <select id="input1" class="required" name="input1">
        <option value="volvo">Volvo
        </option>
        <option value="saab">Saab
        </option>
        <option value="mercedes">Mercedes
        </option>
        <option value="audi">Audi
        </option>
      </select>
      <select id="input2" class="required" name="input2">
        <option value="Alpha">Alpha
        </option>
        <option value="Beta">Beta
        </option>
        <option value="Gamma">Gamma
        </option>
        <option value="Radial">Radial
        </option>
      </select>
      <select id="input3" class="required" name="input3">
        <option value="">
        </option>
        <option value="up">up
        </option>
        <option value="down">down
        </option>
        <option value="left">left
        </option>
      </select>
      <input id="input4" class="required" type="text" name="input4" />
      <input id="input5" class="required" type="text" name="input5" />
      <select id="input6" class="required" name="input6">
        <option value="1">1
        </option>
        <option value="2">2
        </option>
        <option value="3">3
        </option>
        <option value="4">4
        </option>
      </select>
      <select id="input7" class="required" name="input7">
        <option value="happy">happy
        </option>
        <option value="sad">sad
        </option>
        <option value="round">round
        </option>
        <option value="flat">flat
        </option>
      </select>
      <button id="btn1" name="btn1" type="submit">Submit
      </button>
    </form>
  </div>
  <div id="footerContainer">
    <form id="form2">
      <input id="inputa" class="required" name="inputa">
      <input id="inputb" class="required" name="inputb">
      <input id="inputc" class="required" name="inputc">
      <input id="inputd" class="required" name="inputd">
      <input id="inpute" class="required" name="inpute">
      <input id="inputf" class="required" name="inputf">
      <input id="inputg" class="required" name="inputg">
      <button id="btn2" name="btn2" type="submit">Submit
      </button>
    </form>
  </div>
</body>

Upvotes: 0

Jonathan Payne
Jonathan Payne

Reputation: 2223

jsFiddle( http://jsfiddle.net/BctQP/18/ )

<form id="theForm">
    <input type="text"/>
    <input type="text"/>
    <input type="text"/>
    <input type="text"/>
    <input type="button" onclick="validateTextBoxes();" value="Click"/>
</form>

<script>
    function validateTextBoxes()
    {
        $("#theForm input").each( function()
        {
            if ( $(this).is('[type=text]') && !parseInt( $(this).val() ) )
            {
                $(this).css("background-color","red");
            }
        });
    }
</script>​

Upvotes: 2

Brad Christie
Brad Christie

Reputation: 101614

// locate all ":input" elements within a generic <form>,
// then use .each() to loop through all results
$('form :input').each(function(){
  var $el = $(this); // element we're testing

  // attempt to cast the form's value to a number
  var n = parseFloat($el.val());

  // check if the conversion passed
  if (isNaN(n)){
    // $el does not have a number in it
  }
});

I think is what you're after. You can also specify input[type="text"] if you want to be more specific to <input type="text" ... />

Or, more concisely:

$('form input[type="text"]').each(function(i,e){
    if (isNaN(parseFloat(e.value,10))){
        $(e).css('backgroundColor','red');
    }
});

Upvotes: 6

Kay
Kay

Reputation: 70

For each loop:

for (var $input in $('input[type="text"]')) {
    //code here
}

Upvotes: 1

gdoron
gdoron

Reputation: 150313

$('form input[type="text"]').each(function(){
        // Do your magic here
        if (this.value.match(/\D/)) // regular expression for numbers only.
            Error();
});

If you got the form id:

$('#formId input[type="text"]').each(function(){
        // Do your magic here
});

Upvotes: 17

Related Questions