Cara keluar dari jQuery setiap Loop

677

Bagaimana cara keluar dari eachloop jQuery ?

Saya telah mencoba:

 return false;

Dalam lingkaran tetapi ini tidak berhasil. Ada ide?

Luke101
sumber
11
Untuk anak cucu: mengapa si penanya mengatakan kembali palsu tidak berhasil? Hampir setiap jawaban mengatakan untuk melakukan itu. Ingin tahu apakah itu mungkin karena itu hanya mengakhiri setiap loop. Pernyataan balik di dalam for-loop, sebaliknya, akan keluar dari loop dan fungsi panggilan . Untuk mendapatkan perilaku drastis seperti itu dari setiap loop, Anda harus mengatur bendera dengan lingkup penutupan di dalam setiap loop, lalu menanggapi bendera di luarnya.
Bob Stein
8
@ BobStein-VisiBone Seseorang menghapus komentar asli saya. Saya meletakkannya return falsedi tempat yang salah. Ketika saya memperbaikinya semuanya berfungsi.
Luke101
1
tidak yakin mengapa "pembaruan" mengatakan return falsetidak berfungsi $().each- karena itu benar.
billynoah
2
@ Luke101 Anda harus memperbarui pertanyaan untuk memperjelas apa yang tidak berfungsi. Tanya Jawab ini tidak masuk akal ketika pertanyaan Anda mengatakan bahwa jawaban yang diterima tidak berfungsi.
xr280xr

Jawaban:

1182

Untuk breaka $.eachatau $(selector).eachloop, Anda harus kembali falseke loop callback.

Mengembalikan truelompatan ke iterasi berikutnya, setara dengan continuedalam loop normal.

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

// or

$(selector).each(function() {
  if (condition) {
    return false;
  }
});
CMS
sumber
3
Apa yang saya cari, terima kasih. @OZZIE, cukup gunakan "return true;" atau "return false;" berdasarkan kondisi Anda.
dchayka
2
Apa yang dimaksud dengan @CMS dengan "return falsein the loop callback."? Di mana tepatnya ini?
mesqueeb
Misalnya$.each(array, function(key, value) { if(value == "foo") return false; });
SteveEdson
1
Tidak tahu jQuery harus menukar posisi parameter dari javascript forEach.
Mikee
1
@AlexR Breaking out $().eachdilakukan dengan cara yang persis sama, hasil edit Anda hanya menyebabkan kebingungan.
Jake
57

Menurut dokumentasi return false;harus melakukan pekerjaan itu.

Kita dapat memecah loop $ .each () [..] dengan membuat fungsi callback menjadi false.

Kembalikan salah dalam callback:

function callback(indexInArray, valueOfElement) {
  var booleanKeepGoing;

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

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

BTW, continuebekerja seperti ini:

Mengembalikan non-salah sama dengan pernyataan melanjutkan dalam for for; itu akan langsung melompat ke iterasi berikutnya.

powtac
sumber
35

Saya membuat Fiddle untuk jawaban atas pertanyaan ini karena jawaban yang diterima salah dan ini adalah utas StackOverflow pertama yang dikembalikan dari Google terkait pertanyaan ini.

Untuk keluar dari $. Setiap Anda harus menggunakan return false;

Ini Fiddle yang membuktikannya:

http://jsfiddle.net/9XqRy/

iamjpg
sumber
14
Saya suka biola, tapi saya tidak yakin mengapa Anda mengatakan jawaban yang diterima salah, karena Anda berdua mengatakan hal yang sama.
gitsitgo
34

Saya menemukan situasi di mana saya bertemu dengan kondisi yang merusak loop, namun kode setelah fungsi .each () masih dieksekusi. Saya kemudian mengatur bendera ke "true" dengan pemeriksaan langsung untuk bendera setelah fungsi .each () untuk memastikan kode yang diikuti tidak dieksekusi.

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

"masing-masing" menggunakan fungsi panggilan balik. Fungsi panggilan balik menjalankan terlepas dari fungsi panggilan, sehingga tidak mungkin untuk kembali ke fungsi panggilan dari fungsi panggilan balik.

gunakan untuk loop jika Anda harus menghentikan eksekusi loop berdasarkan pada beberapa kondisi dan tetap berada di fungsi yang sama.

Sumit Jambhale
sumber
6

Saya tahu ini pertanyaan yang cukup lama tetapi saya tidak melihat jawaban apa pun, yang menjelaskan mengapa dan kapan mungkin untuk kembali.

Saya ingin menjelaskannya dengan 2 contoh sederhana:

1. Contoh: Dalam hal ini, kami memiliki iterasi sederhana dan kami ingin memutuskan dengan return true, jika kami dapat menemukan ketiganya.

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

jika kita memanggil fungsi ini, itu hanya akan mengembalikan yang benar.

2. Contoh Dalam kasus ini, kami ingin beralih dengan setiap fungsi jquery , yang menggunakan fungsi anonim sebagai parameter.

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;
}
Vural
sumber