2016-06-20 29 views
0

Ich möchte eine anonyme Funktion als Rückruf übergeben, dann rufen Sie es an. Ich vermisse wahrscheinlich etwas Einfaches, aber ich bekomme nur den Fehler 'Uncaught type error - Callback ist keine Funktion'. Das ist, was ich tue - (mit jQuery) - passiere ich den Rückruf als eine anonyme Funktion, wenn ein neues Objekt zu erstellen:Rufen Sie Javascript Callback

$('#someid').alphaColorPicker({ 
      callback: function() { 
       console.log("called") 
      } 
     }); 

Dann rufe ich sie an einem gewissen Punkt (oder versuchen):

$.fn.alphaColorPicker = function(callback) { 

    ... 
    ... 

    callback(); //this throws the error 
} 

Wie kann ich die Callback-Funktion korrekt aufrufen? Danke.

Antwort

0

Sie sind nicht direkt auf die Funktion übergeben, Sie ein Objekt vorbei, die

callback Eigenschaft hat

machen

$.fn.alphaColorPicker = function(options) { 

    ... 

    options.callback(); //this throws the error 
} 
3

Blick auf den Wert, den Sie senden:

{ callback: function() { ... } } 

That ist keine Funktion.

Es ist ein Objekt mit einer Eigenschaft namens callback, die eine Funktion ist.

Deshalb:

callback.callback(); 

Oder Sie könnten eine tatsächliche Funktion anstelle eines Objekts übergeben:

$('#someid').alphaColorPicker(function() { console.log("called") }); 
0

Das, was Sie in den alphaColorPicker passieren ist kein Callback-Funktion, sondern ein Objekt, das einen Wert enthält, der ein Rückruf ist.

{ // When putting it within {} its a new object. 
    // Where 'callback' is a member/key of the object. 
    callback : function() { 
    console.log("called"); 
} 

Wenn Sie stattdessen die Funktion direkt übergeben:

$('#someid').alphaColorPicker(function() { 
    console.log("called"); 
}); 

Sie es über callback(); sofort anrufen können. Wenn Sie es als ein Objekt zu halten, können Sie es durch Aufrufen der Mitglied des Objekts aufrufen kann, anstatt zu versuchen, das Objekt als eine Funktion aufzurufen:

callback.callback(); 
+1

Danke, ich habe das irgendwie herausgefunden, aber deine Antwort erklärt, warum ich nirgendwohin komme - hätte callback.callback() verwenden sollen, wie du schon sagtest. – ardmark

+0

@ardmark, fühlen Sie sich frei, eine Antwort als richtig (und/oder Upvote) zu markieren, wenn einige von ihnen Ihnen geholfen haben, das Problem zu lösen. – Jite

-2

das Problem gefunden, sollte die Funktion nicht bestanden haben, als

callback: function() { 
       console.log("called") 
      } 

Aber wie folgt aus:

$('#' + boxID).alphaColorPicker(function() { 
      console.log("hello") 
    }); 

Und wenn ich in übergeben Parameter wollen, kann ich es wie folgt tun:

$('#' + boxID).alphaColorPicker({x:styleName, y:id, callback:function() { 
     //do something 
}}); 

Aber ich bin verwirrt darüber, wie passieren Parameter in/out wie in jQuery Event-Handler wie:

$("#"+boxID).alphaColorPicker({x:styleName, y:this.inputID}, function(e){} 

});

Wie greifen Sie hier auf den Rückruf zu? In meinem Beispiel sind in alphaColorPicker callback.x und callback.y natürlich verfügbar, aber die Callback-Funktion wird als Objekt übergeben, ich kann nicht sehen, wie ich sie aufrufen soll.