2010-09-29 47 views
29

我想返回false,並從功能返回,如果我發現第一個空白文本框使用jQuery.each()時返回一個值?

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

和上面的代碼是不是爲我工作:( 任何人可以幫助?

回答

53

你跳出來,但是從在循環,我反而使用選擇您的特定「沒有價值」檢查,是這樣的:

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

或者,將結果作爲你走內環路,並返回從外循環,結果:

function validate() { 
    var valid = true; 
    $('input[type=text]').each(function(){ 
    if($(this).val() == "") //or a more complex check here 
     return valid = false; 
    }); 
    return valid; 
} 
+0

+1的巧妙運用選擇和長度。 – Nolo 2013-06-03 18:58:35

+0

@Nick Craver,這是一個很舊的帖子,但我有一個問題。在每個循環完成之前,函數返回true是否存在風險? – YahyaE 2016-03-25 09:59:48

+1

絕對爲零這樣的風險,因爲直到.each()完成,它將不會進行到最後一個語句。 @YahyaE – K48 2016-06-29 03:39:14

13

你可以這樣說:

function validate(){ 
    var rv = true; 
    $('input[type=text]').each(function(){ 
     if($(this).val() == "") { 
      rv = false; // Set flag 
      return false; // Stop iterating 
     } 
    }); 
    return rv; 
} 

要返回true如果你不找它,它假定。

您可能會發現,這是那些sitautions,你不希望使用each在所有之一:

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