762 votes

Comment sortir de chaque boucle de jQuery

Comment puis-je sortir d'un jQuery each boucle ?

J'ai essayé :

 return false;

Dans la boucle mais cela n'a pas fonctionné. Avez-vous des idées ?

Mise à jour 9/5/2020

J'ai mis le return false; au mauvais endroit. Quand je l'ai mis à l'intérieur de la boucle, tout a fonctionné.

15 votes

Pour la postérité : pourquoi l'auteur de la question a-t-il dit que retourner false ne fonctionnait pas ? Pratiquement toutes les réponses disent qu'il faut le faire. Je me demandais si c'était possible parce que cela ne mettait fin qu'à la boucle each. Une déclaration de retour à l'intérieur d'une boucle for, par contre, serait sortir de la boucle et la fonction d'appel . Pour obtenir un comportement aussi radical d'un each-loop, il faudrait définir un drapeau avec une portée de fermeture à l'intérieur du each-loop, puis répondre au drapeau à l'extérieur de celui-ci.

10 votes

@BobStein-VisiBone Quelqu'un a supprimé mon commentaire original. J'ai mis le return false au mauvais endroit. Quand je l'ai réparé, tout a fonctionné.

1 votes

Je ne sais pas pourquoi la "mise à jour" dit return false ne fonctionne pas avec $().each - parce que c'est le cas.

1348voto

CMS Points 315406

A break a $.each ou $(selector).each vous devez retourner false dans le rappel de la boucle.

Retour à true passe à l'itération suivante, ce qui équivaut à un continue dans une boucle normale.

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

// or

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

3 votes

Juste ce que je cherchais, merci. @OZZIE, utilisez simplement "return true ;" ou "return false ;" en fonction de vos conditions.

2 votes

Que veut dire @CMS par "retour false dans le callback de la boucle " ? Où cela se trouve-t-il exactement ?

0 votes

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

58voto

powtac Points 18619

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

Nous pouvons interrompre la boucle $.each() [ ] en faisant en sorte que la fonction de callback retourne false.

Retourner false dans le callback :

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 ça :

Renvoyer non-faux est la même chose qu'une instruction continue dans une boucle for ; elle passe immédiatement à l'itération suivante.

36voto

David Aguirre Points 254

Je me suis retrouvé dans une situation où j'ai rencontré une condition qui a interrompu la boucle, mais le code après la fonction .each() a continué à s'exécuter. J'ai alors défini un drapeau à "true" avec une vérification immédiate du drapeau après la fonction .each() pour m'assurer que le code qui suivait n'était pas exécuté.

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

35voto

iamjpg Points 357

J'ai créé un Fiddle pour la réponse à cette question parce que la réponse acceptée est incorrecte et que c'est le premier fil de StackOverflow renvoyé par Google concernant cette question.

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

Voici un violon qui le prouve :

http://jsfiddle.net/9XqRy/

15 votes

J'aime le violon, mais je ne sais pas pourquoi vous dites que la réponse acceptée est incorrecte, car vous dites tous deux la même chose.

10voto

UR13X Points 1325

Je sais que c'est une vieille question mais je n'ai pas vu de réponse qui clarifie pourquoi et quand il est possible de rompre avec le retour.

Je voudrais l'expliquer à l'aide de deux exemples simples :

1. Exemple : Dans ce cas, nous avons une itération simple et nous voulons rompre avec le retour de 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 voulons itérer avec l'outil jquery chaque fonction qui prend la fonction anonyme comme 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;
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X