Return a value when using jQuery.each()?

会有一股神秘感。 提交于 2019-12-17 05:04:53

问题


I want to return false and return from function if I find first blank textbox

function validate(){
 $('input[type=text]').each(function(){
   if($(this).val() == "")
     return false;
});
}

and above code is not working for me :( can anybody help?


回答1:


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;
}



回答2:


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)
}



回答3:


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.



来源:https://stackoverflow.com/questions/3820269/return-a-value-when-using-jquery-each

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!