web-dev-qa-db-fra.com

Retourne une valeur lors de l'utilisation de jQuery.each ()?

Je veux retourner false et retourner de function si je trouve la première zone de texte vide

function validate(){
 $('input[type=text]').each(function(){
   if($(this).val() == "")
     return false;
});
}

et le code ci-dessus ne fonctionne pas pour moi: ( quelqu'un peut-il aider?

33
Prashant Lakhlani

Vous sautez, mais dans la boucle inner , je voudrais plutôt utiliser un sélecteur pour votre contrôle spécifique "sans valeur", comme ceci:

function validate(){
  if($('input[type=text][value=""]').length) return false;
}

Ou définissez le résultat au fur et à mesure que vous entrez dans la boucle et renvoyez that result de la boucle externe:

function validate() {
  var valid = true;
  $('input[type=text]').each(function(){
    if($(this).val() == "") //or a more complex check here
      return valid = false;
  });
  return valid;
}
58
Nick Craver

Vous pouvez le faire comme ça:

function validate(){
    var rv = true;
    $('input[type=text]').each(function(){
        if($(this).val() == "") {
            rv = false;   // Set flag
            return false; // Stop iterating
        }
    });
    return rv;
}

Cela suppose que vous souhaitiez renvoyer true si vous ne le trouvez pas.

Vous constaterez peut-être qu'il s'agit d'une de ces mises en garde pour lesquelles vous ne souhaitez pas utiliser each du tout:

function validate(){
    var inputs = $('input[type=text]');
    var index;
    while (index = inputs.length - 1; index >= 0; --index) {
        if (inputs[index].value == "") { // Or $(inputs[index]).val() == "" if you prefer
            return false;
        }
    }
    // (Presumably return something here, though you weren't in your example)
}
14
T.J. Crowder

Je veux ajouter quelque chose aux réponses existantes pour effacer le comportement de $(selector).each et pourquoi il ne respecte pas renvoyer false dans le code de OP.

return mot-clé à l'intérieur de $(selector).each est utilisé pour interrompre ou continuer la boucle. Si vous utilisez return false, cela équivaut à une instruction break dans une boucle for/while. Renvoyer non-false est identique à une instruction continue dans une boucle for; il passera immédiatement à la prochaine itération. La source

Comme vous renvoyez false, la boucle se rompt et la fonction renvoie undefined dans votre cas. Vous avez le choix d’utiliser une variable var extérieure à $.each ou de ne pas l’utiliser complètement comme @TJCrowder l’a écrit.

0
Mr.Hunt