Cách thoát khỏi jQuery mỗi vòng lặp


674

Làm cách nào để thoát ra khỏi eachvòng lặp jQuery ?

Tôi đã thử:

 return false;

Trong vòng lặp nhưng điều này đã không làm việc. Có ý kiến ​​gì không?


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

7
@ BobStein-VisiBone Ai đó đã xóa nhận xét ban đầu của tôi. Tôi đặt return falsesai chỗ. Khi tôi sửa nó, mọi thứ đều hoạt động.
Luke101

1
không chắc chắn tại sao "cập nhật" nói return falsekhông hoạt động với $().each- bởi vì nó không hoạt động.
billynoah

2
@ Luke101 bạn nên cập nhật câu hỏi để làm rõ những gì không hoạt động. Câu hỏi này không có ý nghĩa gì khi câu hỏi của bạn nói rằng câu trả lời được chấp nhận không hoạt động.
xr280xr

Câu trả lời:


1176

Đến breakmột vòng lặp $.eachhoặc $(selector).each, bạn phải quay lại falsetrong vòng gọi lại.

Quay trở lại truebỏ qua lần lặp tiếp theo, tương đương với một continuevòng lặp bình thường.

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

// or

$(selector).each(function() {
  if (condition) {
    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 "return true;" hoặc "trả lại sai;" dựa trên điều kiện của bạn
dchayka

2
@CMS có nghĩa là gì với "return falsein loop loop."? Chính xác thì đây là đâu?
mesqueeb

Ví dụ:$.each(array, function(key, value) { if(value == "foo") return false; });
SteveEdson

1
Không biết jQuery đã phải trao đổi vị trí tham số từ forEach javascript.
Mikee

1
@AlexR Thoát ra khỏi một $().eachđược thực hiện theo cách chính xác như vậy, chỉnh sửa của bạn chỉ phục vụ để gây nhầm lẫn.
Jake

57

Theo tài liệu return false;nên làm công việc.

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

Trả về false trong cuộc gọi lại:

function callback(indexInArray, valueOfElement) {
  var booleanKeepGoing;

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

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

BTW, continuehoạt động như thế này:

Trả về không sai cũng giống như câu lệnh continue trong vòng lặp for; nó sẽ bỏ qua ngay lập tức để lặp lại.


35

Tôi đã tạo một 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 là không chính xác cộng với đây là luồng StackOverflow đầu tiên được trả về từ Google liên quan đến câu hỏi này.

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

Đây là một Fiddle chứng minh điều đó:

http://jsfiddle.net/9XqRy/


14
Tôi thích câu đố, 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 bạn đều nói cùng một điều.
gitsitgo

34

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

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

7

"Mỗi" sử dụng chức năng gọi lại. Hàm gọi lại thực thi bất kể chức năng gọi, do đó 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 dừng thực thi vòng lặp dựa trên một số điều kiện và duy trì cùng chức năng.


6

Tôi biết đó là một câu hỏi khá cũ nhưng tôi không thấy câu trả lời nào, điều này làm rõ lý do tại sao và khi nào có thể phá vỡ bằng cách trả lại.

Tôi muốn giải thích nó với 2 ví dụ đơn giản:

1. Ví dụ: Trong trường hợp này, chúng ta có một phép lặp đơn giản và chúng ta muốn ngắt với return true, nếu chúng ta có thể tìm thấy ba.

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

nếu chúng ta gọi hàm này, nó sẽ trả về true.

2. Ví dụ Trong trường hợp này, chúng tôi muốn lặp lại với từng hàm của jquery , lấy hàm ẩn danh làm tham số.

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;
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.