2016-08-06 65 views
0

Hier versuche ich, beide divs rot, über den Rückruf. Es funktioniert jedoch nur für einen, nicht für beide.Der Weg zum Rückruf einer Funktion

Ich weiß, es ist wahrscheinlich nicht sehr clever Frage, aber ich habe wirklich mehrere Stunden damit verbracht zu verstehen, warum es nicht funktioniert.

Was ist los damit?

<div id="foo">foo</div> 
<div id="bar">bar</div> 

<script> 

function foo() { 
    document.querySelector("#foo").style.color = "red"; 
} 

function bar() { 
    document.querySelector("#bar").style.color = "red"; 
} 

foo(bar); 

</script> 
+2

Wie genau haben Sie es erwarten zu arbeiten? 'bar' wird nie aufgerufen und' foo' ignoriert übergebene Argumente. – Oriol

+0

@james, ändern Sie einfach 'foo (bar);' zu 'foo(); bar(); '. Bitte verwenden Sie nicht die aktuell angenommene Antwort. – Thomas

Antwort

3

Wenn Sie foo(bar) nennen, übergibt er die Funktion bar als Argument an foo. Aber foo führt keine Argumente auf und Sie rufen auch nicht bar darin an. Ändern Sie Ihre foo Funktion wie folgt.

function foo(callback) { 
    document.querySelector("#foo").style.color = "red"; 
    callback(); 
} 

aktualisieren

Diese Lösung ist nicht die beste Praxis jedoch für Ihre Situation. Was Sie erreichen möchten, erfordert keinen Rückruf. Sie sollten einen der folgenden Schritte ausführen.

  • Kombinieren Sie diese beiden Funktionen zu einem.
  • Rufen Sie foo und bar zusammen.

Sie sollten vermeiden, einen Rückruf in einem so einfachen Fall wie diesem zu verwenden.

+1

bitte, bitte tu das nicht. bitte rufe einfach beide Funktionen an: 'foo(); bar(); 'oder den Code beider Funktionen in einen setzen:' function foo() { document.querySelector ("# foo"). style.color = "red"; document.querySelector ("# bar"). Style.color = "rot"; } 'und rufen Sie einfach' foo(); ' – Thomas

+0

Obwohl ich mit Ihrer Antwort einverstanden bin, dass dies ziemlich albern ist, wollte ich immer noch eine Antwort geben, die zeigt, wie man Rückrufe durchführt. Aber ich werde sagen, dass Sie für dieses spezielle Beispiel den Rückruf nicht benötigen. Er sollte wirklich beide Funktionen aufrufen oder kombinieren. – kamoroso94

+0

Ja, ich habe das, aber die Art, wie er fragt, zeigt, dass er nicht die Erfahrung hat, deine Absichten notwendigerweise zu verstehen. Ich mache mir nur Sorgen, dass er denken könnte, dass dies der richtige Weg wäre, um solche Sachen zu schreiben. – Thomas

0

Sie haben zwei Funktionen, sondern fordern nur eins:

foo(bar); 

nur die bar Funktion foo geht, die nichts damit zu tun hat.

diese Funktion erhalten, beide Funktionen aufrufen:

foo(); 
bar();