Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Javascript中传递要作为回调处理的字符串或函数名列表_Javascript_Jquery_Callback - Fatal编程技术网

如何在Javascript中传递要作为回调处理的字符串或函数名列表

如何在Javascript中传递要作为回调处理的字符串或函数名列表,javascript,jquery,callback,Javascript,Jquery,Callback,做了一点谷歌搜索,但没有找到我想要的 为了减少应用程序所需的JAvascript行数,我尝试使用尽可能多的可重用函数 当然,问题是要尽可能使这些功能灵活 所以我有一个表单,它是通过使用jQuery的克隆函数动态扩展的。为了使其工作,需要运行一些附加函数,例如,在动态创建的元素上正确初始化日期选择器 这些要求因要克隆的表单而异 因此,我调用我的克隆函数如下: $('.button').click(function (){ var thisID = $(this).attr('id').re

做了一点谷歌搜索,但没有找到我想要的

为了减少应用程序所需的JAvascript行数,我尝试使用尽可能多的可重用函数

当然,问题是要尽可能使这些功能灵活

所以我有一个表单,它是通过使用jQuery的克隆函数动态扩展的。为了使其工作,需要运行一些附加函数,例如,在动态创建的元素上正确初始化日期选择器

这些要求因要克隆的表单而异

因此,我调用我的克隆函数如下:

$('.button').click(function (){
    var thisID = $(this).attr('id').replace('add', '');
    cloneDetails(thisID, initialiseDates);
});
cloneDetails函数如下所示:

function cloneDetails(cur_num, callBackFunctions) {

  /// do loads of stuff ///

 callBackFunctions();

});
在本例中,克隆函数将运行并执行它需要的操作,然后它将运行第二个函数调用
initialiseDates

不过,我希望能够指定几个函数名,以便在克隆函数之后运行,并调用

cloneDetails(thisID, 'initialiseDates, doSomethingElse, doAnotherThing');
因此,说明在cloneDetails函数运行之后要运行的函数列表

我认为我没有正确设置回调方法,也不知道应该如何设置

非常感谢你的帮助


编辑:我不想将所有这些函数捆绑到一个函数中,关键是这些函数都应该可以单独和/或一起使用。

我可以想出几种方法:

  • 您可以拆分字符串并在列表中的每个名称中使用
    eval(name+'())
    。请注意,
    eval()
    可能是邪恶的、安全的

  • 为什么不将函数作为数组传递,而不是字符串?只需迭代
    参数[1..n]
    参数
    是一个包含所有函数参数的自动变量)

  • 使用匿名函数:

    cloneDetails(thisID, function(){
        initialiseDates();
        doSomethingElse();
        doAnotherThing();
    });
    
  • 我喜欢最后一种方法,因为:

  • 这是最灵活的
  • 可读的
  • 只在需要的地方添加几个字节的代码
  • 最有效的
  • 另一个选项(如果使用jQuery>1.7):可以使用函数

    cloneDetails(thisID, $.Callbacks()
        .add(initialiseDates, doSomethingElse, doAnotherThing));
    
    function cloneDetails(cur_num, callBackFunctions) {
    
      /// do loads of stuff ///
    
      callBackFunctions.fire();
    
    });
    

    您可以传递函数数组。[初始日期,doSomethingElse,…]是的,选项3正是我不确定该怎么做的!唯一的问题是,由于某种原因,我的initialiseDates函数实际上不会那样工作!也有人这样做,但日期这一点是非常普遍适用的,所以我刚刚将其包含在克隆函数中。谢谢