Come uscire da jQuery per ogni ciclo


677

Come posso uscire da un eachciclo jQuery ?

Ho provato:

 return false;

Nel ciclo ma questo non ha funzionato. Qualche idea?


11
Per i posteri: perché l'interrogante ha detto che restituire false non ha funzionato? Praticamente ogni risposta dice di farlo. Mi chiedevo se fosse forse perché questo termina solo ogni ciclo. Una dichiarazione di ritorno all'interno di un ciclo for, al contrario, uscirebbe dal ciclo e dalla funzione chiamante . Per ottenere un comportamento così drastico da un singolo ciclo, devi impostare un flag con ambito di chiusura all'interno di ciascun loop, quindi rispondere al flag esterno.
Bob Stein,

8
@ BobStein-VisiBone Qualcuno ha cancellato il mio commento originale. Ho messo il return falseposto sbagliato. Quando l'ho risolto tutto ha funzionato.
Luca

1
non sono sicuro del motivo per cui "l'aggiornamento" dice return falseche non funziona $().each, perché funziona.
Billynoah,

2
@ Luke101 dovresti aggiornare la domanda per chiarire cosa non funzionava. Questo Q / A non ha senso quando la tua domanda dice che la risposta accettata non funziona.
xr280xr,

Risposte:


1182

Per breakuna $.eacho $(selector).eachciclo, si deve tornare falsenella richiamata ciclo.

Il ritorno truesalta alla successiva iterazione, equivalente a a continuein un ciclo normale.

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

// or

$(selector).each(function() {
  if (condition) {
    return false;
  }
});

3
Proprio quello che stavo cercando, grazie. @OZZIE, basta usare "return true;" o "return false;" in base alle tue condizioni.
Dchayka,

2
Cosa significa @CMS con "return falsein the call callback"? Dov'è esattamente questo?
mesqueeb,

Ad esempio$.each(array, function(key, value) { if(value == "foo") return false; });
SteveEdson,

1
Non so che jQuery ha dovuto scambiare le posizioni dei parametri da javascript per ogni.
Mikee,

1
@AlexR L'eliminazione di un $().eachviene eseguita esattamente allo stesso modo, la modifica serve solo a creare confusione.
Jake,

57

Secondo la documentazione return false;dovrebbe fare il lavoro.

È possibile interrompere il ciclo $ .each () [..] rendendo la funzione di callback restituita false.

Restituisce false nel callback:

function callback(indexInArray, valueOfElement) {
  var booleanKeepGoing;

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

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

A proposito, continuefunziona così:

Restituire non-false è lo stesso di un'istruzione continue in un ciclo for; salterà immediatamente alla successiva iterazione.


35

Ho creato un violino per la risposta a questa domanda perché la risposta accettata non è corretta e in più questo è il primo thread StackOverflow restituito da Google riguardo a questa domanda.

Per uscire da $ .each devi usare return false;

Ecco un violino che lo dimostra:

http://jsfiddle.net/9XqRy/


14
Mi piace il violino, ma non sono sicuro del motivo per cui dici che la risposta accettata è errata, perché entrambi dici la stessa cosa.
gitsitgo,

34

Mi sono imbattuto nella situazione in cui ho incontrato una condizione che ha interrotto il ciclo, tuttavia il codice dopo la funzione .each () è stato ancora eseguito. Ho quindi impostato un flag su "true" con un controllo immediato per il flag dopo la funzione .each () per garantire che il codice che seguiva non fosse eseguito.

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

7

"each" utilizza la funzione di callback. La funzione di richiamata viene eseguita indipendentemente dalla funzione di chiamata, quindi non è possibile tornare alla funzione di chiamata dalla funzione di richiamata.

utilizzare per il ciclo se è necessario interrompere l'esecuzione del ciclo in base a una condizione e rimanere nella stessa funzione.


6

So che è una domanda piuttosto vecchia ma non ho visto alcuna risposta, il che chiarisce che perché e quando è possibile rompere con il ritorno.

Vorrei spiegarlo con 2 semplici esempi:

1. Esempio: in questo caso, abbiamo una semplice iterazione e vogliamo rompere con return true, se riusciamo a trovare i tre.

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

se chiamiamo questa funzione, restituirà semplicemente il vero.

2. Esempio In questo caso, vogliamo iterare con ciascuna funzione di jquery , che accetta la funzione anonima come parametro.

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;
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.