Dla potomnych: dlaczego pytający powiedział, że zwracanie wartości false nie działa? Praktycznie każda odpowiedź mówi, aby to zrobić. Zastanawiasz się, czy to możliwe, ponieważ to tylko kończy każdą pętlę. Natomiast instrukcja return wewnątrz pętli for kończy wyjście z pętli i funkcji wywołującej . Aby uzyskać tak drastyczne zachowanie z każdej pętli, musisz ustawić flagę z zakresem zamknięcia w każdej pętli, a następnie zareagować na flagę poza nią.
Bob Stein
8
@ BobStein-VisiBone Ktoś usunął mój oryginalny komentarz. Umieściłem return falseniewłaściwe miejsce. Kiedy to naprawiłem, wszystko działało.
Łuk
1
nie jestem pewien, dlaczego „aktualizacja” mówi, return falseże nie działa $().each- ponieważ tak jest.
billynoah
2
@ Luke101 powinieneś zaktualizować pytanie, aby wyjaśnić, co nie działa. To pytanie nie ma sensu, gdy twoje pytanie mówi, że zaakceptowana odpowiedź nie działa.
Możemy przerwać pętlę $ .each () [..], ustawiając funkcję zwrotną na false.
Zwróć false w wywołaniu zwrotnym:
function callback(indexInArray, valueOfElement){var booleanKeepGoing;this;// == valueOfElement (casted to Object)return booleanKeepGoing;// optional, unless false // and want to stop looping}
BTW, continuedziała tak:
Zwracanie wartości innej niż false jest takie samo, jak instrukcja continu w pętli for; przejdzie natychmiast do następnej iteracji.
Utworzyłem skrzypek dla odpowiedzi na to pytanie, ponieważ zaakceptowana odpowiedź jest nieprawidłowa, a także jest to pierwszy wątek StackOverflow zwrócony przez Google w związku z tym pytaniem.
Aby wyrwać się z każdego $ $ musisz użyć return false;
Lubię skrzypce, ale nie jestem pewien, dlaczego mówisz, że zaakceptowana odpowiedź jest nieprawidłowa, ponieważ oboje mówicie to samo.
gitsitgo
34
Natknąłem się na sytuację, w której spełniłem warunek, który spowodował przerwanie pętli, jednak kod po funkcji .each () nadal był wykonywany. Następnie ustawiam flagę na „true”, natychmiast sprawdzając flagę po funkcji .each (), aby upewnić się, że kod, który nastąpił, nie został wykonany.
$('.groupName').each(function(){if($(this).text()== groupname){
alert('This group already exists');
breakOut =true;returnfalse;}});if(breakOut){
breakOut =false;returnfalse;}
„każdy” używa funkcji oddzwaniania. Funkcja oddzwaniania jest wykonywana niezależnie od funkcji wywoływania, więc powrót do funkcji wywoływania z funkcji oddzwaniania nie jest możliwy.
użyj dla pętli, jeśli musisz zatrzymać wykonywanie pętli na podstawie pewnych warunków i pozostać przy tej samej funkcji.
Wiem, że to dość stare pytanie, ale nie widziałem żadnej odpowiedzi, która wyjaśniałaby, dlaczego i kiedy można zerwać ze zwrotem.
Chciałbym wyjaśnić to dwoma prostymi przykładami:
1. Przykład: W tym przypadku mamy prostą iterację i chcemy zerwać z wartością true, jeśli uda nam się znaleźć trzy.
function canFindThree(){for(var i =0; i <5; i++){if(i ===3){returntrue;}}}
jeśli wywołamy tę funkcję, po prostu zwróci prawdę.
2. Przykład W tym przypadku chcemy iterować z każdą funkcją jquery , która przyjmuje jako parametr funkcję anonimową.
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
niewłaściwe miejsce. Kiedy to naprawiłem, wszystko działało.return false
że nie działa$().each
- ponieważ tak jest.Odpowiedzi:
Aby
break
się$.each
lub$(selector).each
pętli, trzeba wrócićfalse
do zwrotnego pętli.Powrót
true
przeskakuje do następnej iteracji, równoważnej acontinue
w normalnej pętli.źródło
false
w pętli zwrotnej”? Gdzie to dokładnie jest?$.each(array, function(key, value) { if(value == "foo") return false; });
$().each
odbywa się dokładnie w ten sam sposób, twoja edycja służy tylko do spowodowania zamieszania.Zgodnie z dokumentacją
return false;
należy wykonać zadanie.Zwróć false w wywołaniu zwrotnym:
BTW,
continue
działa tak:źródło
Utworzyłem skrzypek dla odpowiedzi na to pytanie, ponieważ zaakceptowana odpowiedź jest nieprawidłowa, a także jest to pierwszy wątek StackOverflow zwrócony przez Google w związku z tym pytaniem.
Aby wyrwać się z każdego $ $ musisz użyć
return false;
Oto Fiddle, który to potwierdza:
http://jsfiddle.net/9XqRy/
źródło
Natknąłem się na sytuację, w której spełniłem warunek, który spowodował przerwanie pętli, jednak kod po funkcji .each () nadal był wykonywany. Następnie ustawiam flagę na „true”, natychmiast sprawdzając flagę po funkcji .each (), aby upewnić się, że kod, który nastąpił, nie został wykonany.
źródło
„każdy” używa funkcji oddzwaniania. Funkcja oddzwaniania jest wykonywana niezależnie od funkcji wywoływania, więc powrót do funkcji wywoływania z funkcji oddzwaniania nie jest możliwy.
użyj dla pętli, jeśli musisz zatrzymać wykonywanie pętli na podstawie pewnych warunków i pozostać przy tej samej funkcji.
źródło
Wiem, że to dość stare pytanie, ale nie widziałem żadnej odpowiedzi, która wyjaśniałaby, dlaczego i kiedy można zerwać ze zwrotem.
Chciałbym wyjaśnić to dwoma prostymi przykładami:
1. Przykład: W tym przypadku mamy prostą iterację i chcemy zerwać z wartością true, jeśli uda nam się znaleźć trzy.
jeśli wywołamy tę funkcję, po prostu zwróci prawdę.
2. Przykład W tym przypadku chcemy iterować z każdą funkcją jquery , która przyjmuje jako parametr funkcję anonimową.
źródło