将options对象中的回调函数传递给其他函数

时间:2015-06-08 14:18:03

标签: jquery callback

我肯定做错了,现在我被卡住了。 我想要做的是将函数作为回调函数传递给另一个函数。

我的功能:

function myfunc(options, callback) {
 var settings = {
  opt1 = "something",
  url = "someURL"
 }
 if( options ){
  $.extend( settings, options );
 }
 $.ajax({ 
  url: settings.url,
  success: function(data) {
   callback();
  }
 });
}

提供参数的HTML:

<input type="button" id="btn" value="Click me" data-callback="callbackFN" />

点击事件:

$("#btn").click(function() {
 myfunc({
  opt1: "text",
  url: "theURL"
 }, $(this).data("callback"));
});

不幸的是,回调总是作为普通字符串传递,而不是作为可调用函数传递。 我知道这听起来像一个新手问题,但我坚持这个。请帮忙。

1 个答案:

答案 0 :(得分:3)

$(this).data("callback")返回一个字符串。您希望找到由$(this).data("callback")返回的字符串标识的实际函数。

如果该功能是全局的,您可以window[$(this).data("callback")]来引用window.callbackFN

如果函数不是全局的(即,它是函数的本地函数),您可以使用eval来引用它,但这可能会在代码中打开大的安全问题。例如,请考虑data-callback="alert(document.cookie)"

如果你想避免全局回调和eval,另一种选择可能是将你的回调放在一个对象而不是全局范围内:

var myCallbacks = {
    callbackFN: function() { ... },
    otherCallback: function() { ... }
}

请参阅myCallbacks[$(this).data("callback")]