Как вырвать из jQuery каждый цикл

568

Как мне вырвать из jQuery each цикл?

Я пытался:

 return false;

В цикле, но это не сработало. Есть идеи?

ОБНОВЛЕНИЕ Несмотря на то, что неясно, какова была первоначальная область вопроса, пожалуйста, имейте в виду, что выбранный ответ охватывает только функцию $.each() но не функцию $().each.

  • 4
    Для потомков: почему спрашивающий сказал, что возвращение ложного не работает? Практически каждый ответ говорит об этом. Интересно, возможно ли это потому, что это завершает только каждый цикл. Оператор return внутри цикла for, напротив, выходит из цикла и вызывающей функции . Чтобы получить такое резкое поведение от каждого цикла, вам нужно установить флаг с closure-scope внутри каждого цикла, а затем ответить на флаг вне его.
  • 5
    @ BobStein-VisiBone Кто-то удалил мой оригинальный комментарий. Я положил return false в неправильном месте. Когда я это исправил, все заработало.
Показать ещё 1 комментарий
Теги:
loops

6 ответов

1020
Лучший ответ

Чтобы break $.each или $(selector).each, вы должны вернуть false в обратном $(selector).each цикла.

Возвращение true пропускает до следующей итерации, эквивалентно continue в нормальном цикле.

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

// or

$(selector).each(function() {
  if (condition) {
    return false;
  }
});
  • 3
    Просто то, что я искал, спасибо. @OZZIE, просто используй «верни истину»; или "вернуть ложь"; исходя из ваших условий.
  • 1
    Что означает @CMS с «возвратить false в обратном вызове цикла»? Где именно это?
Показать ещё 4 комментария
54

В соответствии с документацией return false; должно выполняться задание.

Мы можем разбить цикл $.each() [..], выполнив функцию обратного вызова return false.

Возврат false в обратном вызове:

function callback(indexInArray, valueOfElement) {
  var booleanKeepGoing;

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

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

BTW, continue работает следующим образом:

Возврат не-false - это то же самое, что и оператор continue в цикле for; он немедленно перейдет к следующей итерации.

34

Я создал скрипт для ответа на этот вопрос, потому что принятый ответ неверен, и это первый поток StackOverflow, возвращенный Google из-за этого вопроса.

Чтобы выйти из $.each, вы должны использовать return false;

Вот скрижали, доказывающие это:

http://jsfiddle.net/9XqRy/

  • 12
    Мне нравится скрипка, но я не уверен, почему вы говорите, что принятый ответ неверен, потому что вы оба говорите одно и то же.
28

Я столкнулся с ситуацией, когда я встретил условие, которое нарушило цикл, однако код после функции .each() все еще выполняется. Затем я устанавливаю флаг "true" с немедленной проверкой флага после функции .each(), чтобы гарантировать, что следующий код не был выполнен.

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

"каждый" использует функцию обратного вызова. Функция обратного вызова выполняется независимо от вызывающей функции, поэтому невозможно вернуться к функции вызова из функции обратного вызова.

использовать для цикла, если вам нужно остановить выполнение цикла на основе некоторого условия и остаться в той же функции.

1

Я знаю, что это довольно старый вопрос, но я не видел никакого ответа, который объясняет, почему и когда его можно порвать с возвращением.

Я хотел бы объяснить это на двух простых примерах:

1. Пример: в этом случае у нас есть простая итерация, и мы хотим порвать с возвращением true, если мы можем найти три.

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

если мы вызовем эту функцию, она просто вернет истину.

2. Пример. В этом случае мы хотим выполнить jquery для каждой функции, которая принимает анонимную функцию в качестве параметра.

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню