2010-11-23 22 views
1

私は、itemというテーブル内のすべての "緑色の"行をチェックして、xxx​​という非表示の入力要素に特定の値と一致しないものが含まれているかどうかを確認するだけです:jQuery.each()return return

$('table#items tr.green').each(function() { 
    if (myvalue != $('input#xxx', $(this)).val()){ 
     alert('The xxx element is not the same as ' + myvalue + ' on all green rows'); 
     return; 
    } 
}); 

このコードの下にjQuery.ajax()リクエストがあり、警告ボックスが表示されても、jQuery.ajax()はまだ実行されています!どんな考え?

+0

ような何かをしなければなりません? – poke

+0

'return false;'または 'break'ですか? – Fred

答えて

1

あなたが望むものは、それぞれの外に関数を返すことですか?あなたはちょうどあなたが今、このfunktionが閉じて返し、それぞれが機能を生成し、それぞれの内側に戻るカント、ループがまだ実行され、あなたは多分にも、実際のAJAX呼び出しを示すことができ、この

var continue = true; 

jQuery(bla).each(function(){ 
    if(bla == blubb){ 
     continue = false; 
    } 
}); 

if(!continue){ 
    return 
} 
0

JQueryの.eachは、でそれぞれの渡された関数を実行します。したがって、関数の1つから戻ることにしたとしても、残りのすべての要素に対して関数を実行します。

.eachコールを終了するには、コールの開始時にチェックする変数を設定し、その機能の処理をスキップする必要があります。ただし、JQueryがすべての要素に対してその関数を実行するのを停止することはできません。

3

jQuery.eachは、コールバックを引数として取ります。あなたは無名関数を渡していますが、この関数はtable#items tr.greenと一致する各項目で呼び出されているので、returnはすべて無名関数からの戻り値です。

は、あなたが望むものを達成するために、いくつかの種類のフラグを設定する必要があります。

var flag = false; 
$('table#items tr.green').each(function() { 
    if (myvalue != $('input#xxx', $(this)).val()){ 
     alert('The xxx element is not the same as ' + myvalue + ' on all green rows'); 
     flag = false; 
    } 
}); 

if (flag) 
{ 
    return; 
} 
+0

+1包括的な答えをお寄せください – Jimbo

+0

+1これは私の期待通りに私の各ループが機能していなかった理由を説明します! –

0

それぞれの方法で内部コールバックからあなたのコードのリターンのリターン。これは、jQuery.eachを含む関数から返されません。

0

実際に返されるのは.each()によって実行される関数であり、他の繰り返しは引き続き実行されます。代わりに、.ajax()呼び出しと同じスコープでフラグを使用してみてください。