2011-02-08 7 views
0

私はこのループをclick()の後に実行しており、return falseがイテレータのより深くに置かれている場合はreturn falseになりません。どのようにして偽を返すことができるか? メソッド内で「false」を返す方法は?

$.each($(".payment"), function(key, value) { 
    the_date = $(value).children("input:first").val(); 
    if(the_date != "") { 
    if(the_date.split("/").length != 3) { 
     return false; // <--- This doesn't work 
    }; 
    }; 
}; 

は、ここに各「コールバックに適用される偽

if($("input#date_awarded").val().split("/")[2] > 2010) { 
    return false; // <-- Totally works 
}; 
+0

セミコロンが間違っています。ブロックの後にセミコロンを入れないでください。 – SLaks

答えて

3

、各コールバックからreturn falseリターンをやって、ループを停止します。

代わりに、変数を使用して戻り値を保持し、その値をループの後に戻すことができます。

var returnValue = true; //use a variable for the return value 
$.each($(".payment"), function (key, value) { 
    the_date = $(value).children("input:first").val(); 
    if (the_date != "") { 
     if (the_date.split("/").length != 3) { 
      returnValue = false; // set the return value 
      return false; // break the loop 
     } 
    } 
}); 
return returnValue; // return the return value 
+0

ファンタスティックなアイデアパトリック! – Trip

+0

@Trip:どうぞよろしくお願いいたします。 – user113716

+0

'return returnValue'は' return true'または 'return undefined'でなければなりません – Raynos

0

リターンを動作しない別のバリデータです。それを 'クリック'コールバックに適用しますか?もしそうなら、このようにそれを行う:.each()

jQuery(selector).click(function() { 
    var returnValue = true; 

    jQuery(anotherSelector).each(function() { 
     do_stuff(); 
     returnValue = false; 
    } 

    return returnValue; 
} 
1

バグを修正してコードを整理する@patrickdwコードサンプルを採取してください。

var returnValue = true; 
$.each($(".payment>input:first-child"), function (key, value) { 
    if (this.value.split("/").length !== 3) { 
     return (returnValue = false); 
    } 
}); 
return returnValue; 

またはちょうどキックのために、ボディブロックのないループの1行でそれをやり直すことができます。

for (var returnVal = true, var i = 0, var inputs = $(".payment>input:first-child"), var text = $(inputs[i]).val(); i < inputs.length && ((text.split("/").length !== 3 && (returnVal = false)) || true); text = $(inputs[++i]).val()); 
return returnVal; 

私はあなたがメンテナを苦しめるやループのためにその本当に虐待上記のようなコードを書くことはお勧めしません。

+0

あなたは 'first-child'を使う必要があります(これは[OPの以前の質問]から私の答えになりました)(http://stackoverflow.com/questions/4936127/children-of-many-parents-jquery-selector/ 4936216#4936216))。そして、あなたが物事をきれいにしている限り、あなたは '.val()'の代わりに 'this.value'を行うかもしれません。 – user113716

+0

@patrickdw 'this.value'と' .val() 'は意味的に異なります。 '.val()'は物事に奇妙なことをしています。代わりに安全であるかどうかは、入力の '型式 'を知らなくても安全であるかどうか試してみてください。 – Raynos

+0

良い点。テキスト入力だけなので、安全です。私は 'input '要素のための' .val() '唯一の修正点は' type =' radio ''であり、Safariに問題があると思います。 – user113716

関連する問題