如果每个动作功能实际上已经是一个不同的功能(而不是一个功能,基于传递给它的索引行为不同),那么我d通过在链接上放置一个属性并通过点击来获取它,这样做可以这样做:http://jsfiddle.net/jfriend00/gFmvG/。
function action0(){ console.log("fn action0"); }
function action1(){ console.log("fn action1"); }
function action2(){ console.log("fn action2"); }
function action3(){ console.log("fn action3"); }
var actions = [action0, action1, action2, action3];
function createLinks() {
var $container = $("#container"),
links = "";
for (var i=0; i < 4; i++) {
links += '<a id="link_' + i + '" href="#" data-num="' + i + '">Link_' + i + '</a>';
$container.on("click", '"#link_' + i + '"', function() {
actions[$(this).data("num")]();
});
}
$container.html(links);
}
createLinks();
如果你不必须有单独的函数对每一个动作,我不喜欢这样,你可以在这里看到:http://jsfiddle.net/jfriend00/Z8Rq6/。
function doAction(index) {
console.log("fn action" + index);
}
function createLinks() {
var $container = $("#container"),
links = "";
for (var i=0; i < 4; i++) {
links += '<a id="link_' + i + '" href="#" data-num="' + i + '">Link_' + i + '</a>';
$container.on("click", '"#link_' + i + '"', function() {
doAction($(this).data("num"));
});
}
$container.html(links);
}
createLinks();
这也可以与执行关闭其锁定在指数值完成,但我发现语法稍差可读(它需要太多的脑循环读取代码,并知道它在做什么),所以我更喜欢这种方式的属性。
+1 - 这是正确的答案,我会抛出一个data-foo属性来存储我,但无论 – 2012-01-08 00:43:37
@AdamRackis是我这样做了纯粹的懒惰 – Esailija 2012-01-08 00:55:06
@Esailija非常感谢这个解决方案,因为这样,循环完全干净(内部没有函数),甚至不需要辅助函数!:) – Bay 2012-01-08 00:59:00