2016-06-20 8 views
0

Я хочу передать анонимную функцию в качестве обратного вызова, а затем назовите ее. Я, вероятно, пропустил что-то простое, но я просто получил сообщение об ошибке «Uncaught type error» - обратный вызов не является функцией ». Это то, что я делаю - (с помощью JQuery) - я передать функцию обратного вызова в качестве анонимной функции при создании нового объекта:Вызов javascript callback

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

Тогда я называю это в какой-то момент (или попытаться):

$.fn.alphaColorPicker = function(callback) { 

    ... 
    ... 

    callback(); //this throws the error 
} 

Как правильно вызвать функцию обратного вызова? Спасибо.

ответ

0

Вы не непосредственно передавая функцию, вы передаете объект, который имеет callback свойство

делают

$.fn.alphaColorPicker = function(options) { 

    ... 

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

Посмотрите на значение, которое вы отправляете:

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

Это не является функцией.

Это объект с названием callback который является функцией.

Поэтому:

callback.callback(); 

Или вы могли бы передать фактическую функцию вместо объекта:

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

Вещь вы передаете в alphaColorPicker не является функцией обратного вызова, а скорее объект, содержащий значение, которое является обратным вызовом.

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

Если вы вместо того, чтобы передать функции непосредственно:

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

Вы можете назвать это сразу через callback();. Если вы хотите сохранить его как объект, вы можете вызвать его с помощью вызова члена объекта вместо того, чтобы вызвать объект как функцию:

callback.callback(); 
+1

Спасибо, я только что понял, но ваш ответ объясняет, почему я никуда не денусь - должен был использовать callback.callback(), как вы указали. – ardmark

+0

@ardmark, не стесняйтесь отмечать ответ как правильный (и/или upvote), если кто-либо из них помог вам решить проблему. – Jite

-2

Обнаружили проблему, не должны были пройти функцию в

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

Но так же, как это:

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

И если я хочу передать параметры в, я могу сделать это следующим образом:

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

Но я запутался о том, как передать параметры в/из, как обработчики событий JQuery, таких как:

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

});

Как получить доступ к обратному вызову здесь? В моем примере, в alphaColorPicker callback.x и callback.y, очевидно, доступны, но функция обратного вызова передается как объект, который я не вижу, как его вызвать.