Her Döngü jQuery nasıl kırılır


677

Bir jQuery eachdöngüsünden nasıl çıkabilirim ?

Denedim:

 return false;

Döngüde ama bu işe yaramadı. Herhangi bir fikir?


11
Gelecek nesiller için: soru soran, yanlış döndürmenin neden işe yaramadığını söyledi? Hemen hemen her cevap bunu söylüyor. Muhtemelen bunun her döngüyü sonlandırdığından mı merak ediyorsunuz? Bunun yerine, for-loop içindeki bir return ifadesi , loop ve call işlevinden çıkar . Her döngüden böyle sert davranışlar elde etmek için, her döngü içinde kapatma kapsamı olan bir bayrak ayarlamanız ve ardından dışındaki bayrağı yanıtlamanız gerekir.
Bob Stein

8
@ BobStein-VisiBone Birisi orijinal yorumumu sildi. return falseYanlış yere koydum . Düzelttiğimde her şey işe yaradı.
Luke101

1
"güncelleme" ifadesinin neden çalışmadığından emin return falsedeğilim $().each- çünkü çalışıyor.
billynoah

2
@ Luke101, neyin çalışmadığını netleştirmek için soruyu güncellemelisiniz. Bu soru / cevap, sorunuz kabul edilen cevabın işe yaramadığını söylediğinde hiçbir anlam ifade etmiyor.
1919

Yanıtlar:


1181

To breaka $.eachveya $(selector).eachdöngü, geri dönmek zorunda falsedöngü geri aramasında.

Normal döngüdeki truea'ya eşdeğer bir sonraki yinelemeye geri dönmek continue.

$.each(array, function(key, value) { 
    if(value === "foo") {
        return false; // breaks
    }
});

// or

$(selector).each(function() {
  if (condition) {
    return false;
  }
});

3
Tam aradığım şey, teşekkürler. @ OZZIE, sadece "return true;" veya "yanlış döndür;" koşullarınıza göre.
dchayka

2
@CMS, " falsedöngü geri çağrısında dönüş" ile ne anlama geliyor ? Bu tam olarak nerede?
mesqueeb

Ör.$.each(array, function(key, value) { if(value == "foo") return false; });
SteveEdson

1
JQuery için parametre konumlarını javascript forEach takas etmek zorunda bilmiyorum.
Mikee

1
@AlexR Bir öğeden ayrılmak $().eachtamamen aynı şekilde yapılır, düzenlemeniz yalnızca karışıklığa neden olur.
Jake

57

Belgelere göre return false;iş yapmalı.

Geri arama işlevinin yanlış döndürülmesini sağlayarak $ .each () döngüsünü [..] kırabiliriz.

Geri aramada false değerini döndür:

function callback(indexInArray, valueOfElement) {
  var booleanKeepGoing;

  this; // == valueOfElement (casted to Object)

  return booleanKeepGoing; // optional, unless false 
                           // and want to stop looping
}

BTW, şu şekilde continueçalışır:

False olmayan öğenin döndürülmesi, for döngüsünde devam ifadesiyle aynıdır; hemen sonraki yinelemeye atlar.


35

Bu sorunun cevabı için bir Keman oluşturdum çünkü kabul edilen cevap yanlış artı bu, bu soru ile ilgili Google'dan döndürülen ilk StackOverflow iş parçacığı.

$ .Each değerinden çıkmak için return false;

İşte bir Fiddle bunu kanıtlıyor:

http://jsfiddle.net/9XqRy/


14
Kemanı seviyorum, ama kabul edilen cevabın neden yanlış olduğunu söylediğinden emin değilim, çünkü ikiniz de aynı şeyi söylüyorsunuz.
gitsitgo

34

Ben döngü kırdı bir koşulu bir araya geldi, ancak .each () işlevinden sonra kod hala yürütüldü durumla karşılaştı. Daha sonra .each () işlevinden sonra bayrağı takip eden kodun yürütülmediğinden emin olmak için bayrağı "true" değerine ayarladım.

$('.groupName').each(function() {
    if($(this).text() == groupname){
        alert('This group already exists');
        breakOut = true;
        return false;
    }
});
if(breakOut) {
    breakOut = false;
    return false;
} 

7

"each", geri arama işlevini kullanır. Geri arama işlevi, arama işlevinden bağımsız olarak yürütülür, bu nedenle geri arama işlevinden arama işlevine geri dönmek mümkün değildir.

bir koşula bağlı olarak döngü yürütmesini durdurmanız ve aynı işlevde kalmanız gerekiyorsa döngü için kullanın.


6

Oldukça eski bir soru biliyorum ama herhangi bir cevap görmedim.

Bunu 2 basit örnekle açıklamak istiyorum:

1. Örnek: Bu durumda, basit bir yinelememiz var ve üçünü bulabilirsek, true değerinden kopmak istiyoruz.

function canFindThree() {
    for(var i = 0; i < 5; i++) {
        if(i === 3) {
           return true;
        }
    }
}

bu işlevi çağırırsak, sadece doğru olanı döndürür.

2. Örnek Bu durumda, anonim fonksiyonu parametre olarak alan jquery'nin her fonksiyonuyla tekrarlamak istiyoruz .

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;
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.