JQueryのeach
ループから抜け出すにはどうすればよいですか?
私が試してみました:
return false;
ループではこれはうまくいきませんでした。何か案は?
$.each
または $(selector).each
ループをbreak
にするには、ループコールバックでfalse
を返す必要があります。
true
を返すと、次の繰り返しにスキップします。これは、通常のループのcontinue
と同じです。
$.each(array, function(key, value) {
if(value === "foo") {
return false; // breaks
}
});
// or
$(selector).each(function() {
if (condition) {
return false;
}
});
ドキュメントによるとreturn false;
は仕事をするべきです。
コールバック関数にfalseを返させることで、$。each()ループ[..]を中断できます。
コールバックでfalseを返します:
function callback(indexInArray, valueOfElement) {
var booleanKeepGoing;
this; // == valueOfElement (casted to Object)
return booleanKeepGoing; // optional, unless false
// and want to stop looping
}
ところで、continue
はこのように動作します:
False以外の値を返すことはforループのcontinueステートメントと同じです。次の繰り返しにすぐにスキップします。
この質問に対する回答用にFiddleを作成しました。これは、受け入れられた回答が正しくないことに加えて、この質問に関してGoogleから返された最初のStackOverflowスレッドです。
$ .eachから抜け出すにはreturn false;
を使わなければなりません
これを証明するFiddleがあります。
私はループを破った条件を満たした状況に出くわしました、しかし、.each()関数の後のコードはまだ実行されました。次に、.each()関数の後にフラグをすぐにチェックしてフラグを "true"に設定し、後続のコードが実行されなかったことを確認します。
$('.groupName').each(function() {
if($(this).text() == groupname){
alert('This group already exists');
breakOut = true;
return false;
}
});
if(breakOut) {
breakOut = false;
return false;
}
"each"はコールバック関数を使います。コールバック関数は呼び出し関数に関係なく実行されるため、コールバック関数から呼び出し関数に戻ることはできません。
ある条件に基づいてループの実行を停止し、同じ関数に留まる必要がある場合はfor for loopを使用します。
私はそれがかなり古い質問であることを知っています、しかし私は何の答えも見ませんでした。
2つの簡単な例を挙げて説明します。
1.例: この場合、単純な反復があり、3つが見つかった場合はreturn trueで中断します _
function canFindThree() {
for(var i = 0; i < 5; i++) {
if(i === 3) {
return true;
}
}
}
この関数を呼び出すと、単にtrueが返されます。
2.例 この場合、jqueryの each関数 を使用して、無名関数をパラメータとして使用します _
function canFindThree() {
var result = false;
$.each([1, 2, 3, 4, 5], function(key, value) {
if(value === 3) {
result = true;
return false; //This will only exit the anonymous function and stop the iteration immediatelly.
}
});
return result; //This will exit the function with return true;
}