Для потомков: почему спрашивающий сказал, что возвращение false не работает? Практически каждый ответ говорит об этом. Интересно, возможно ли это потому, что это завершает только каждый цикл. Оператор return внутри цикла for, напротив, выходит из цикла и вызывающей функции . Чтобы получить такое резкое поведение от каждого цикла, вам нужно установить флаг с closure-scope внутри каждого цикла, а затем ответить на флаг вне его.
Боб Стейн
8
@ BobStein-VisiBone Кто-то удалил мой оригинальный комментарий. Я поставил не return falseв том месте. Когда я это исправил, все заработало.
Luke101
1
не уверен, почему «обновление» говорит, return falseчто не работает $().each- потому что это работает.
Billynoah
2
@ Luke101 вы должны обновить вопрос, чтобы было понятно, что не работает. Этот вопрос не имеет смысла, когда ваш вопрос говорит, что принятый ответ не работает.
xr280xr
Ответы:
1183
Для breakболее $.eachили $(selector).eachпетли, вы должны вернуться falseв функции обратного вызова цикла.
Возвращение trueпропускает к следующей итерации, эквивалентной a continueв нормальном цикле.
$.each(array,function(key,value){if(value==="foo"){returnfalse;// breaks}});// or
$(selector).each(function(){if(condition){returnfalse;}});
Мы можем разорвать цикл $ .each () [..], заставив функцию обратного вызова вернуть false.
Вернуть false в обратном вызове:
function callback(indexInArray, valueOfElement){var booleanKeepGoing;this;// == valueOfElement (casted to Object)return booleanKeepGoing;// optional, unless false // and want to stop looping}
Кстати, continueработает так:
Возвращение non-false - это то же самое, что и оператор continue в цикле for; он сразу перейдет к следующей итерации.
Я создал Fiddle для ответа на этот вопрос, потому что принятый ответ неверен, плюс это первая ветка StackOverflow, возвращенная Google по этому вопросу.
Чтобы вырваться из $ .each, вы должны использовать return false;
Мне нравится скрипка, но я не уверен, почему вы говорите, что принятый ответ неверен, потому что вы оба говорите одно и то же.
Гитситго
34
Я столкнулся с ситуацией, когда я встретил условие, которое нарушило цикл, однако код после функции .each () все еще выполнялся. Затем я установил флаг в «true» с немедленной проверкой флага после функции .each (), чтобы убедиться, что следующий код не был выполнен.
$('.groupName').each(function(){if($(this).text()== groupname){
alert('This group already exists');
breakOut =true;returnfalse;}});if(breakOut){
breakOut =false;returnfalse;}
«каждый» использует функцию обратного вызова. Функция обратного вызова выполняется независимо от вызывающей функции, поэтому невозможно вернуться к вызывающей функции из функции обратного вызова.
используйте цикл for, если вам нужно остановить выполнение цикла на основе некоторого условия и остаться в той же функции.
Я знаю, что это довольно старый вопрос, но я не видел никакого ответа, который разъясняет, почему и когда его можно порвать с возвращением.
Я хотел бы объяснить это на двух простых примерах:
1. Пример: в этом случае у нас есть простая итерация, и мы хотим порвать с возвращением true, если мы можем найти три.
function canFindThree(){for(var i =0; i <5; i++){if(i ===3){returntrue;}}}
если мы вызовем эту функцию, она просто вернет истину.
2. Пример В этом случае мы хотим перебрать каждую функцию jquery , которая принимает анонимную функцию в качестве параметра.
function canFindThree(){var result =false;
$.each([1,2,3,4,5],function(key,value){if(value===3){
result =true;returnfalse;//This will only exit the anonymous function and stop the iteration immediatelly.}});return result;//This will exit the function with return true;}
return false
в том месте. Когда я это исправил, все заработало.return false
что не работает$().each
- потому что это работает.Ответы:
Для
break
более$.each
или$(selector).each
петли, вы должны вернутьсяfalse
в функции обратного вызова цикла.Возвращение
true
пропускает к следующей итерации, эквивалентной acontinue
в нормальном цикле.источник
false
в цикле»? Где именно это?$.each(array, function(key, value) { if(value == "foo") return false; });
$().each
выполняется точно так же, ваше редактирование только вызывает путаницу.По документации
return false;
следует выполнить работу.Вернуть false в обратном вызове:
Кстати,
continue
работает так:источник
Я создал Fiddle для ответа на этот вопрос, потому что принятый ответ неверен, плюс это первая ветка StackOverflow, возвращенная Google по этому вопросу.
Чтобы вырваться из $ .each, вы должны использовать
return false;
Вот Скрипка, доказывающая это:
http://jsfiddle.net/9XqRy/
источник
Я столкнулся с ситуацией, когда я встретил условие, которое нарушило цикл, однако код после функции .each () все еще выполнялся. Затем я установил флаг в «true» с немедленной проверкой флага после функции .each (), чтобы убедиться, что следующий код не был выполнен.
источник
«каждый» использует функцию обратного вызова. Функция обратного вызова выполняется независимо от вызывающей функции, поэтому невозможно вернуться к вызывающей функции из функции обратного вызова.
используйте цикл for, если вам нужно остановить выполнение цикла на основе некоторого условия и остаться в той же функции.
источник
Я знаю, что это довольно старый вопрос, но я не видел никакого ответа, который разъясняет, почему и когда его можно порвать с возвращением.
Я хотел бы объяснить это на двух простых примерах:
1. Пример: в этом случае у нас есть простая итерация, и мы хотим порвать с возвращением true, если мы можем найти три.
если мы вызовем эту функцию, она просто вернет истину.
2. Пример В этом случае мы хотим перебрать каждую функцию jquery , которая принимает анонимную функцию в качестве параметра.
источник