2009-11-23 42 views
439

Làm cách nào để thoát khỏi vòng lặp jQuery each?Làm thế nào để thoát ra khỏi jQuery mỗi Vòng

Tôi đã thử:

return false; 

Trong vòng lặp nhưng điều này đã không làm việc. Bất kỳ ý tưởng?

+2

Đối với hậu thế: tại sao người hỏi trả lời sai đã không hoạt động? Hầu như mọi câu trả lời đều nói như vậy. Tự hỏi nếu nó có thể vì nó chỉ chấm dứt mỗi vòng lặp. Ngược lại, một câu lệnh trả về trong vòng lặp for-loop sẽ ** thoát khỏi vòng lặp _and_ hàm gọi **. Để có được hành vi mạnh mẽ như vậy từ mỗi vòng lặp, bạn cần đặt cờ với phạm vi đóng trong vòng lặp, sau đó trả lời cờ bên ngoài nó. –

+4

@ BobStein-VisiBone Ai đó đã xóa nhận xét ban đầu của tôi. Tôi đặt 'return false' vào sai chỗ. Khi tôi sửa nó mọi thứ đã hoạt động. – Luke101

+0

Nó để lại một câu hỏi khá khó hiểu. – arame3333

Trả lời

797

Để break vòng lặp $.each, bạn phải trả lại false trong cuộc gọi lại vòng lặp.

Trả lại true bỏ qua lần lặp tiếp theo, tương đương với continue trong vòng lặp thông thường.

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

Chỉ là những gì tôi đang tìm kiếm, cảm ơn. @OZZIE, chỉ cần sử dụng "trả về true"; hoặc "return false;" dựa trên điều kiện của bạn. – dchayka

+0

@CMS có nghĩa là gì với "return' false' trong gọi lại vòng lặp ".? Đây chính xác là ở đâu? – mesqueeb

+0

Ví dụ: '$ .each (mảng, hàm (khóa, giá trị) {if (value ==" foo ") trả về false;});' – SteveEdson

50

According to the documentation return false; should do the job.

Chúng ta có thể phá vỡ $ .each() vòng lặp [..] bằng cách làm cho hàm callback trả về false.

Return sai trong callback:

function callback(indexInArray, valueOfElement) { 
    var booleanKeepGoing; 

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

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

BTW, continue công trình như thế này:

Trở phi sai là giống như một tuyên bố tiếp tục trong một vòng lặp for; nó sẽ bỏ qua ngay lập tức đến lần lặp tiếp theo.

30

Tôi đã tạo Fiddle cho câu trả lời cho câu hỏi này vì câu trả lời được chấp nhận không chính xác và đây là luồng StackOverflow đầu tiên được trả về từ Google về câu hỏi này.

Để thoát ra khỏi một $ .each bạn phải sử dụng return false;

Dưới đây là một Fiddle minh nó:

http://jsfiddle.net/9XqRy/

+10

Tôi thích fiddle, nhưng tôi không chắc tại sao bạn nói câu trả lời được chấp nhận là không chính xác bởi vì cả hai đều nói cùng một điều. – gitsitgo

21

Tôi đã xem qua tình hình nơi tôi đã gặp một điều kiện là đã phá vỡ vòng lặp , tuy nhiên mã sau hàm .each() vẫn được thực hiện. Sau đó, tôi đặt cờ thành "true" với kiểm tra ngay lập tức cờ sau hàm .each() để đảm bảo mã tiếp theo không được thực hiện.

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

"mỗi" sử dụng chức năng gọi lại. Chức năng gọi lại thực hiện không phân biệt chức năng gọi, vì vậy không thể quay lại chức năng gọi từ chức năng gọi lại.

sử dụng cho vòng lặp nếu bạn phải ngừng thực hiện vòng lặp dựa trên một số điều kiện và duy trì chức năng tương tự.

+1

Tôi nghĩ rằng đây sẽ là câu trả lời được chấp nhận! –

Các vấn đề liên quan