簡體   English   中英

在 javascript 中動態更改 function 名稱

[英]dynamically change function name in javascript

$('a').live('click',function(e){
    e.preventDefault();
    var id = $(this).attr('id');
    infowindow2.open(map, marker2); // I need instead of 2 to print the value of variable id
});

如何將數字 2 動態更改為變量 ID?

謝謝你的幫助

不要使用eval ,使用 hash:

var markers = {
    "key1": function(){},
    "key2": function(){},
    "key3": function(){}
};

$('a').live('click',function(e){
    e.preventDefault();
    var id = this.id; //Use this.id instead of attr
    infowindow2.open(map, markers[id]);
});

與其使用eval ,不如更改數據結構:

var  markers = {
    '1': function () { doStuff(); },
    '2': function () { doOtherStuff(); },
}
$('a').live('click',function(e){
    e.preventDefault();
    var id = $(this).attr('id');
    infowindow2.open(map, markers[id]);
});

EVAL 應該始終是最后一個選項

為了在 function 名稱中使用動態名稱,您可以 windows object。

這是一個例子:

var id = '2';
function map2() {
    alert('me called');
}
window["map"+id]();

演示

你的用法是這樣的

$('a').on('click',function(e){
    e.preventDefault();
    var id = $(this).attr('id');
    infowindow2.open(map, window['map'+id]()); 
});

我認為用開關寫一個新的 function 會更容易。 我不推薦使用 eval。

$('a').live('click',function(e){
    e.preventDefault();
    var id = $(this).attr('id');
    infowindow2.open(map, eval('marker' + id)); 
});

現場演示

筆記:

  • eval已棄用,您應該尋找更好的設計。
  • so as live ... 你應該使用on代替。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM