在javascript中动态更改函数名称

时间:2012-04-06 10:49:36

标签: javascript jquery

$('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?

感谢您的帮助

5 个答案:

答案 0 :(得分:10)

请勿使用eval,请使用哈希:

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]);
});

答案 1 :(得分:6)

而不是使用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]);
});

答案 2 :(得分:0)

EVAL应始终是最后一个选项

为了在函数名中使用动态名称,可以使用windows对象。

这是一个例子:

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

Demo

您的用法将是这样的

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

答案 3 :(得分:0)

我认为使用开关编写新功能会更容易。我建议不要使用eval。

答案 4 :(得分:-2)

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

<强> LIVE DEMO

备注:

  • eval已被弃用,您应该寻找更好的设计。
  • 以及live ...您应该使用on代替。