如果每個動作功能實際上已經是一個不同的功能(而不是一個功能,基於傳遞給它的索引行爲不同),那麼我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