Wie rufe ich die Rückgabe der äußeren Funktion von der inneren Funktion auf?

Lesezeit: 2 Minuten

Benutzer-Avatar
serg

Ich habe einen solchen Code:

function allValid() {
    $('input').each(function(index) {
        if(something) {
            return false; 
        }    
    });

    return true;
}

was immer true as zurückgibt return false; beeinträchtigt die anonyme innere Funktion. Gibt es eine einfache Möglichkeit, die Rückgabe der äußeren Funktion aufzurufen?

PS. Ich suche keine Problemumgehung, möchte nur die Antwort auf die ursprüngliche Frage wissen. Wenn die Antwort “nicht möglich” ist, ist es in Ordnung.

Ja, speichern Sie es in einer lokalen Variablen.

function allValid() {
  var allGood = true;
  $('input').each(function (index) {
    if (something) {
      allGood = false;
    }
  });

  return allGood;
}

  • Was nicht effizient ist, denn wenn das erste Element falsch ist, werden die restlichen 1000 sowieso überprüft.

    – serg

    24. März 2010 um 16:54 Uhr

  • @ serg555: dann tu es return (allGood = false) Innerhalb .each. Das wird früh aus der Schleife ausbrechen.

    – Roatin Marth

    24. März 2010 um 16:57 Uhr

  • @Roatin Marth – Es ist ein Abschlusslauf pro Element, es verhält sich nicht wie eine einfache Schleife, stellen Sie es sich als Funktion innerhalb einer Funktion vor.

    – Nick Craver

    24. März 2010 um 16:58 Uhr

  • @Nick Craver: return false Innerhalb .each unterbricht die Schleife. Es ist ein Sonderfall, nach dem jQuery sucht. github.com/jquery/jquery/blob/master/src/core.js#L537

    – Roatin Marth

    24. März 2010 um 17:52 Uhr

  • Was ist, wenn die innere Funktion asynchron ist (wie beim Rückruf, wann/dann)?

    – 1nendlich

    4. November 2014 um 23:11 Uhr

Sie können dies auch mit Filter tun:

var anyInvalid = $('input').filter(function(index) {
                   if(inValidCheck)
                     return true;
                 }).length;

Dies funktioniert, weil 0 als falsch behandelt wird, aber es gibt Ihnen tatsächlich die Anzahl der ungültigen Einträge, die Sie verwenden könnten, um “Sie haben 3 ungültige Einträge” oder so etwas anzuzeigen, wenn Sie wollten.

Könntest du auch verwenden Array.prototype.some die iteriert, bis ein Element gefunden wird, das den Kriterien entspricht.

function allValid() {
    var inputs = $('input');
    if(inputs.toArray().some(function(input){
        if(something)
            return true;
    })) {
        return false;
    } else {
        return true;
    }
}

Benutzer-Avatar
intuitiv

Wenn Sie dies effizient tun möchten, ist dies meiner Meinung nach der beste Weg:

function allValid() {
  elements = $('input')
  for (i = 0; i < elements.length; i++) { invalidityCheck(elements[i]) && return false; }
  return true;
}

Bearbeiten: Obwohl eine eher JavaScript-y-Version wahrscheinlich Ausnahmen verwenden würde:

function allValid() {
  try
    $('input').each(function(index)) {
      if (something) { throw 'something happened!'; }
    });
  catch (e) {
    if (e == 'something happened!') {
      return false;
    } else {
      throw e;
    }
  }
  return true;
}

1244980cookie-checkWie rufe ich die Rückgabe der äußeren Funktion von der inneren Funktion auf?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy