web-dev-qa-db-ja.com

jQuery.each()を使用するときに値を返しますか?

最初の空白のテキストボックスが見つかった場合、falseを返し、関数から戻りたい

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

そして、上記のコードは私のために働いていません:(誰も助けることができますか?

34

あなたは飛び出しているが、innerループから、代わりに、次のように、特定の「値なし」チェックにセレクターを使用します。

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

または、ループ内に入るときに結果を設定し、外部ループからthat結果を返します。

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

次のようにできます:

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

見つからない場合は、trueを返したいと想定しています。

これは、eachをまったく使用したくないシトーションの1つであることがわかります。

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)
}
14
T.J. Crowder

$(selector).eachの動作と、OPのコードでfalseを返すことを尊重しない理由をクリアするために、既存の回答に何かを追加したいと思います。

$(selector).each内のreturnキーワードは、ループを中断または継続するために使用されます。 return falseを使用する場合、for/whileループ内のbreakステートメントと同等です。 false以外を返すことは、continueループのforステートメントと同じです。すぐに次の反復にスキップします。 ソース

Falseを返すため、ループが中断し、関数はundefinedを返すことになります。あなたのオプションは、$.eachの外でvarを使用するか、@ TJCrowderが書いたようにそれを完全に使用しないことです。

0
Mr.Hunt