是否可以使用变量调用函数?

时间:2020-04-24 19:30:46

标签: javascript html jquery

我想根据所单击的<a>的数据值调用一个函数。这可能吗?我尝试了[call]();call();。两者都返回错误。

function a() {
  alert("Hi");
}

function b() {
  alert("Bye");
}

$(function() {
  $("a").click(function() {
    var call = $(this).attr('data-value');
   [call]();
  });
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<a data-value="a">A</a>
<a data-value="b">B</a>

2 个答案:

答案 0 :(得分:2)

您可以从window对象中调用它。

HTML 5中的window对象引用当前窗口以及其中包含的所有项目。因此,我们可以使用它来在字符串中运行函数以及函数的参数。

$(function(){
    $("a").click(function() {  
        var call = $(this).attr('data-value')
        window[call]();
    }); 
});

您也可以通过使用eval()来做到这一点。 但是请注意,eval()方法较旧并且已过时。

$(function(){
    $("a").click(function() {  
        var call = $(this).attr('data-value')
        eval(call)();
    }); 
});

答案 1 :(得分:0)

您应该使用eval函数,该函数计算以字符串形式表示的代码,例如

function a() {
  alert("Hi");
}

function b() {
  alert("Bye");
}

$(function() {
  $("a").click(function() {
    eval($(this).attr('data-value') + '()');
  });
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<a data-value="a">A</a>
<a data-value="b">B</a>