Не может иметь разрыв вне цикла (даже если это в цикле!) - PullRequest
0 голосов
/ 28 марта 2011

Я пытаюсь выйти из цикла, если определенное условие выполняется.Мой код работает нормально, пока я не пытаюсь добавить взлом. Ошибка intellisense в VS2010 и IE8 при запуске обоих говорит мне, что я не могу разорвать вне цикла, но я не думаю, что я.

I 'я совершенно сбит с толку, так что надеюсь, что кто-то может указать на что-то очевидное, я пропускаю

Ответы [ 3 ]

1 голос
/ 28 марта 2011

jQuery может не использовать цикл для функции .each(). Может быть, возврат false может работать (в Python это работает):

var value1 = "hello"; 

$.each(myJsonObject.SomeCollection, function () {

    if (value1 == this.value2) {
        alert("Found it!");
        exitFlag = true;
    }

    if (exitFlag) return false;
});
1 голос
/ 28 марта 2011

Просто return false;, чтобы выйти из цикла .each. Из документации :

Мы можем разорвать цикл $.each() на определенной итерации, вернув функцию обратного вызова false.Возвращение non-false совпадает с оператором continue в цикле for;он сразу перейдет к следующей итерации.

Использование итератора jQuery .each отличается от использования обычного цикла, поэтому break здесь нельзя использовать.Это было бы похоже на это, что невозможно:

for (var i = 0; i < 10; ++i) {
  myFunc(i);
}

function myFunc(i) {
  if (i > 5) {
    break; // ILLEGAL
  }
}
0 голосов
/ 28 марта 2011

Если ваша коллекция может обрабатываться, перемещаться и индексироваться как массив, просто используйте обычный цикл и оторвитесь от него. Или, если вы так сильно хотите использовать итератор $.each для такой простой вещи, просто сделайте так, чтобы ваша функция возвратила false (что фактически сделает итератор $.each остановкой).

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

...