I want to return false and return from function if I find first blank textbox
function validate(){
$(\'input[type=text]\').each(function(){
if($(this).va
You are jumping out, but from the inner loop, I would instead use a selector for your specific "no value" check, like this:
function validate(){
if($('input[type=text][value=""]').length) return false;
}
Or, set the result as you go inside the loop, and return that result from the outer loop:
function validate() {
var valid = true;
$('input[type=text]').each(function(){
if($(this).val() == "") //or a more complex check here
return valid = false;
});
return valid;
}
You can do it like this:
function validate(){
var rv = true;
$('input[type=text]').each(function(){
if($(this).val() == "") {
rv = false; // Set flag
return false; // Stop iterating
}
});
return rv;
}
That assumes you want to return true
if you don't find it.
You may find that this is one of those sitautions where you don't want to use each
at all:
function validate(){
var inputs = $('input[type=text]');
var index;
while (index = inputs.length - 1; index >= 0; --index) {
if (inputs[index].value == "") { // Or $(inputs[index]).val() == "" if you prefer
return false;
}
}
// (Presumably return something here, though you weren't in your example)
}
I want to add something to existing answers to clear the behavior of $(selector).each
and why it doesn't respect return false in OP's code.
return
keyword inside $(selector).each
is used to break or continue the loop. If you use return false
, it is equivalent to a break
statement inside a for/while
loop. Returning non-false is the same as a continue
statement in a for
loop; it will skip immediately to the next iteration. Source
Because you're returning false, the loop breaks and the function ends up returning undefined
in your case.
Your option is to use a var outside $.each
or avoid using it altogether as @TJCrowder wrote.