为每个索引参数分配不同的函数

时间:2015-08-31 02:26:45

标签: jquery indexof

我有这段代码。

$('#my-container-div').on('onAlbumLoad', function(event, index) {
...
});

我需要为每个索引实例分配一个不同的函数,但我不知所措。

在非编码器术语中,我正在寻找:如果index等于0,请执行此操作,如果index等于1,请执行此操作,如果index等于3,请执行此操作,依此类推。

2 个答案:

答案 0 :(得分:0)

我没有按照您要做的事情的整体情况来了解这是否是最佳选择,但您可以使用代码查看index然后决定下一步该怎么做。

可以使用if/elseswitch语句或功能表来完成。

// if/else
$('#my-container-div').on('onAlbumLoad', function(event, index) {
   if (index === 0) {
       func1();
   } else if (index === 1) {
       func2();
   }
});

// switch
$('#my-container-div').on('onAlbumLoad', function(event, index) {
     switch(index) {
         case 0:
             func1();
             break;
         case 1:
             func3();
             break;
     }
});


// function table
var fTable = [func1, func2, func3, func4];

$('#my-container-div').on('onAlbumLoad', function(event, index) {
    if (index < fTable.length) {
        fTable[index]();
    }
});

任何这些都可行。

如果要比较的索引数是2或更少,我会使用if / else。

如果索引的数量超过两个并且您正在检查一组连续的索引,我会使用函数表,因为它更容易扩展而无需编写新代码(您只需向数组添加一个新函数) )。

如果要检查的索引超过两个并且不连续,我可能会使用switch语句。

答案 1 :(得分:0)

尝试创建相应的函数数组,每个函数对应一个index;利用.trigger(event, [args])来打电话 有"onAlbumLoad"的{​​{1}}个活动;例如,index作为参数

&#13;
&#13;
0
&#13;
var fns = [
  function fn0() {
    $(this).html("a")
  },
  function fn1() {
    $(this).html("b")
  },
  function fn2() {
    $(this).html("c")
  }
];

var container = $("#my-container-div");

container.on("onAlbumLoad", function(event, index) {
  fns[index].call(this)
});

$("input").on("change", function() {
  container.trigger("onAlbumLoad", [this.value])
});
&#13;
&#13;
&#13;