JavaScript中动态更改函数名称

3
$('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个回答

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

哈哈,丹尼斯,我比你快了7秒钟))完全一样的答案 - c69

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

0

评估(EVAL)应该始终是最后的选择

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

这里是一个例子:

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

0

我认为编写一个带有开关的新函数会更容易。我不建议使用eval。


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

在线演示

注释:

  • eval已过时,您应该寻找更好的设计。
  • 同样地,live也是如此... 您应该使用on代替。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接