Para a posteridade: por que o questionador disse que retornar falso não funcionou? Praticamente toda resposta diz para fazer isso. Querendo saber se era possivelmente porque isso só termina o cada ciclo. Uma declaração de retorno dentro de um loop for, ao contrário, sairia do loop e da função de chamada . Para obter um comportamento tão drástico de cada loop, você precisa definir um sinalizador com escopo de fechamento dentro de cada loop e responder ao sinalizador fora dele.
Bob Stein
7
@ BobStein-VisiBone Alguém excluiu meu comentário original. Eu coloquei return falseno lugar errado. Quando eu consertei tudo funcionou.
Luke101
1
não sei por que a "atualização" diz return falseque não funciona $().each- porque funciona.
Billynoah # 30/18
2
@ Luke101, você deve atualizar a pergunta para deixar claro o que não estava funcionando. Esta pergunta / pergunta não faz sentido quando sua pergunta diz que a resposta aceita não funciona.
Podemos quebrar o loop $ .each () [..] fazendo com que a função de retorno de chamada retorne falsa.
Retorne false no retorno de chamada:
function callback(indexInArray, valueOfElement){var booleanKeepGoing;this;// == valueOfElement (casted to Object)return booleanKeepGoing;// optional, unless false // and want to stop looping}
BTW, continuefunciona assim:
Retornar não falso é o mesmo que uma instrução continue em um loop for; pulará imediatamente para a próxima iteração.
Eu criei um Fiddle para a resposta a esta pergunta porque a resposta aceita está incorreta e esse é o primeiro thread StackOverflow retornado pelo Google em relação a essa pergunta.
Para sair de um $ .each, você deve usar return false;
Gosto do violino, mas não sei por que você diz que a resposta aceita está incorreta, porque os dois estão dizendo a mesma coisa.
Gititgo
34
Me deparei com a situação em que encontrei uma condição que quebrou o loop, mas o código após a função .each () ainda é executado. Em seguida, defino um sinalizador como "true" com uma verificação imediata do sinalizador após a função .each () para garantir que o código a seguir não foi executado.
$('.groupName').each(function(){if($(this).text()== groupname){
alert('This group already exists');
breakOut =true;returnfalse;}});if(breakOut){
breakOut =false;returnfalse;}
"each" usa a função de retorno de chamada. A função de retorno de chamada é executada independentemente da função de chamada, portanto, não é possível retornar à função de chamada a partir da função de retorno de chamada.
use for loop se você precisar interromper a execução do loop com base em alguma condição e permanecer na mesma função.
Eu sei que é uma pergunta bastante antiga, mas não vi nenhuma resposta, que esclareça isso porque e quando é possível romper com o retorno.
Eu gostaria de explicar com 2 exemplos simples:
1. Exemplo: neste caso, temos uma iteração simples e queremos quebrar com return true, se pudermos encontrar os três.
function canFindThree(){for(var i =0; i <5; i++){if(i ===3){returntrue;}}}
se chamarmos essa função, ela simplesmente retornará o valor verdadeiro.
2. Exemplo Neste caso, queremos iterar com cada função do jquery , que assume a função anônima como parâmetro.
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
no lugar errado. Quando eu consertei tudo funcionou.return false
que não funciona$().each
- porque funciona.Respostas:
Para
break
um$.each
ou$(selector).each
loop, você tem que voltarfalse
no retorno loop.Retornar
true
pula para a próxima iteração, equivalente a umcontinue
loop normal.fonte
false
no retorno de chamada do loop"? Onde exatamente é isso?$.each(array, function(key, value) { if(value == "foo") return false; });
$().each
é feito exatamente da mesma maneira, sua edição serve apenas para causar confusão.De acordo com a documentação
return false;
deve fazer o trabalho.Retorne false no retorno de chamada:
BTW,
continue
funciona assim:fonte
Eu criei um Fiddle para a resposta a esta pergunta porque a resposta aceita está incorreta e esse é o primeiro thread StackOverflow retornado pelo Google em relação a essa pergunta.
Para sair de um $ .each, você deve usar
return false;
Aqui está um violino provando:
http://jsfiddle.net/9XqRy/
fonte
Me deparei com a situação em que encontrei uma condição que quebrou o loop, mas o código após a função .each () ainda é executado. Em seguida, defino um sinalizador como "true" com uma verificação imediata do sinalizador após a função .each () para garantir que o código a seguir não foi executado.
fonte
"each" usa a função de retorno de chamada. A função de retorno de chamada é executada independentemente da função de chamada, portanto, não é possível retornar à função de chamada a partir da função de retorno de chamada.
use for loop se você precisar interromper a execução do loop com base em alguma condição e permanecer na mesma função.
fonte
Eu sei que é uma pergunta bastante antiga, mas não vi nenhuma resposta, que esclareça isso porque e quando é possível romper com o retorno.
Eu gostaria de explicar com 2 exemplos simples:
1. Exemplo: neste caso, temos uma iteração simples e queremos quebrar com return true, se pudermos encontrar os três.
se chamarmos essa função, ela simplesmente retornará o valor verdadeiro.
2. Exemplo Neste caso, queremos iterar com cada função do jquery , que assume a função anônima como parâmetro.
fonte