Если каждая функция действия на самом деле должна быть отдельной функцией (а не одной функцией, которая действует по-разному в зависимости от переданного ей индекса), то я бы сделал это таким образом, поместив атрибут в ссылку и извлекая его пощелкните мышью, чтобы увидеть, как это работает здесь: 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();
Это также можно сделать с помощью выполняемого замыкания, которое фиксирует значение индекса, но я считаю, что этот синтаксис несколько менее читабелен (требуется слишком много циклов разума, чтобы прочитать код и узнать, что он делает) поэтому я предпочитаю этот способ с атрибутом.