【问题标题】:Concatenate variable and function name [duplicate]连接变量和函数名称[重复]
【发布时间】:2020-01-03 05:16:55
【问题描述】:

我们想要连接函数名和变量名。这应该在单击<a> 标记时发生。

我们如何连接函数和变量名?

问题:

  • 我们收到错误消息 fn_dataId() 未定义

期望的输出:

fn_dataId() should be fn_some123();

我们尝试了什么

$(function() {
    $('.link').on('click', function() {
      console.log('clicked');
      var dataId = $(this).attr('data-id');
      console.log('data id - ' + dataId);
      
      // What we tried, but didn't work. 
      fn_dataId(); 
    });
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<a data-id="some123" class="link">
Click here
</a>

【问题讨论】:

  • What is the XY Problem? 为什么会出现这个问题?
  • We want,不,你想要。
  • @RokoC.Buljan 如果他代表他的团队/不仅仅是他自己,则不会:)
  • @mattytommo 心理学 ;)
  • 你最好使用不同的模型而不是你正在做的事情。

标签: javascript jquery html hyperlink


【解决方案1】:

您可以连接字符串,并使用window["function_name"](args); 将结果用作函数:

function fn_some123() {
  console.log('i have been called!');
}

$(function() {
    $('.link').on('click', function() {
      var dataId = $(this).attr('data-id');
      window['fn_' + dataId]();
    });
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<a data-id="some123" class="link">
Click here
</a>

【讨论】:

    【解决方案2】:

    我不确定它的用例,听起来 dataId 作为更通用函数的参数可能会更好,但您可以使用以下方法解决它:

    eval("fn_" + dataId + "()")
    

    但请注意 eval - 执行您从用户那里获取的任何输入都是一个很大的安全风险

    【讨论】:

    • eval 是你应该忘记甚至存在的东西。你知道,你上了一辆公共汽车,然后你学会了避开公共汽车......然后你走路......你很开心......
    猜你喜欢
    • 2015-08-16
    • 2021-02-08
    • 2021-05-20
    • 1970-01-01
    • 1970-01-01
    • 2017-08-22
    • 1970-01-01
    • 1970-01-01
    • 2010-12-14
    相关资源
    最近更新 更多