3 Stimmen

Funktion als Parameter für eine andere Funktion in JS?

Ich versuche, so etwas zu tun Javascript-Funktion als Parameter für eine andere Funktion? . Aber leider ist mir das nicht gelungen. Ich habe etwas falsch gemacht, aber ich weiß nicht, was. pls mir helfen!

Es gibt ein div-Element und eine Funktion. Die Funktion nimmt eine andere Funktion als Parameter und führt sie bei einem Klick auf das div-Element aus:

UPDATE3: Ich habe versucht, den Code mit Ihren Beispielen unten, mit meinem ursprünglichen Webprojekt zum Laufen zu bringen. Aber ich habe ein Problem mit einigen Parametern. Ich hoffe, Sie können diese Frage so schnell beantworten wie die anderen.

UPDATE4: Danke Andy E! und alle anderen, die mir geholfen haben! Wirklich schätzen es!!

!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>
  <head>

  </head>
  <body>
    <div id='divElement'>Hello World!</div>
    <script type="text/javascript">

        function button(exefunction){
            //Some code that decide which date
            var date = '20101010';
            document.getElementById('divElement').onclick = exefunction(date);
        }
        function testfunction(text){
            document.getElementById('divElement').innerHTML = text;
        }
        button(testfunction);
    </script>
  </body>
</html>

0 Stimmen

Überlegen Sie, ob Sie Ihren DOCTYPE aktualisieren wollen.

0 Stimmen

Was soll ich stattdessen verwenden? Meine IDE funktioniert nicht mit HTML-5 doctype

5voto

Andy E Punkte 324972

Ändern testfunction a function und Sie werden eine anonyme Funktion haben, die als Argument übergeben wird. Sie müssen auch die Parens aus exefunction (bei ihnen wird die Funktion nicht zugewiesen, sondern aufgerufen):

    function button(exefunction){
        document.getElementById('divElement').onclick = exefunction;
    }
    button(function(){
        document.getElementById('divElement').innerHTML = 'Changed';
    });

Hier ist ein Arbeitsbeispiel zum Ausprobieren.


Entfernen Sie Ihre Parens!

    button(testfunction);
    // not button(testfunction());

Die Klammern führen die Funktion aus, anstatt sie als Argument zu übergeben. Wenn Sie eine Funktion ausführen, wird stattdessen ihr Rückgabewert übergeben.

Zweite funktionierende Demo.


Für Ihre letzte Bearbeitung müssen Sie Folgendes erstellen eine andere anonyme Funktion, damit der Code funktioniert:

        document.getElementById('divElement').onclick = function () {
            exefunction(date);
        }

Dritte (letzte?) Arbeitsdemo.

0 Stimmen

Ich habe bereits versucht, die Paranthese auszuschließen, und es funktioniert nicht.

0 Stimmen

Sie brauchen das Element nicht zweimal zu suchen... Sie können einfach schreiben this.innerHTML

0 Stimmen

Ich möchte, dass das neue Skript funktioniert. Was habe ich dieses Mal falsch gemacht?

2voto

Xavier Combelle Punkte 10354

Ich würde die Leitung ersetzen

button(testfunction());

von

button(testfunction);

AKTUALISIERT Der Punkt ist, dass onclick ein none-Argument erwarten Funktionen sollten Sie versuchen, etwas in den Zeilen

 function button(exefunction){
        //Some code that decide which date
        var date = '20101010';
        document.getElementById('divElement').onclick = function() {exefunction(date);}
    }

0 Stimmen

Danke! Das war vielleicht eine zu einfache Frage für euch. Aber trotzdem danke.

0 Stimmen

Ich habe versucht, den Code mit Ihren Beispielen und meinem ursprünglichen Webprojekt zum Laufen zu bringen. Aber ich habe ein Problem mit einigen Parametern. Bitte sehen Sie sich die aktualisierte Frage an

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X