web-dev-qa-db-fra.com

Comment sortir de jQuery à chaque boucle

Comment sortir d'une boucle jQuery each?

J'ai essayé:

 return false;

Dans la boucle mais cela n'a pas fonctionné. Des idées?

574
Luke101

Pour breaka $.each ou $(selector).each boucle, vous devez renvoyer falsedans le rappel de boucle.

Le renvoi de truepasse à la prochaine itération, ce qui équivaut à un continuedans une boucle normale.

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

// or

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

Selon la documentation, return false; devrait faire l'affaire.

Nous pouvons casser la boucle $ .each () [..] en renvoyant la fonction de rappel à false.

Renvoie false dans le rappel:

function callback(indexInArray, valueOfElement) {
  var booleanKeepGoing;

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

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

BTW, continue fonctionne comme ceci:

Renvoyer non-false est identique à une instruction continue dans une boucle for; il passera immédiatement à la prochaine itération.

56
powtac

J'ai créé un Fiddle pour la réponse à cette question, car la réponse acceptée est incorrecte. Il s'agit en outre du premier thread StackOverflow renvoyé par Google concernant cette question.

Pour sortir d'un $ .each, vous devez utiliser return false;

Voici un Fiddle le prouvant:

http://jsfiddle.net/9XqRy/

34
iamjpg

Je suis tombé sur une situation où je rencontrais une condition qui cassait la boucle, mais le code après la fonction .each () était toujours exécuté. J'ai ensuite défini un indicateur sur "true" avec une vérification immédiate de l'indicateur après la fonction .each () pour garantir que le code qui a suivi n'a pas été exécuté.

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

"each" utilise la fonction de rappel. La fonction de rappel s'exécute indépendamment de la fonction d'appel. Il n'est donc pas possible de revenir à la fonction d'appel à partir de la fonction de rappel.

utilisez for for si vous devez arrêter l'exécution de la boucle en fonction de certaines conditions et rester dans la même fonction.

8
Sumit Jambhale

Je sais que c'est une question assez ancienne mais je n'ai vu aucune réponse, ce qui précise que pourquoi et quand il est possible de rompre avec le retour.

Je voudrais l'expliquer avec 2 exemples simples:

1. Exemple: Dans ce cas, nous avons une simple itération et nous voulons rompre avec return true, si nous pouvons trouver les trois.

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

si nous appelons cette fonction, elle retournera simplement le vrai.

2. Exemple Dans ce cas, nous souhaitons itérer avec jquery's chaque fonction , qui prend une fonction anonyme en paramètre.

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;
}
2
Vural Acar