jquery - 触发一个以 name 作为变量名的函数

标签 jquery

$('.dgok').click(function(){
var fn = $(this).attr('data-fn');
console.log(fn); // abc
fn();
});

function abc(){
console.log('abc');
}
.dgok{
cursor:pointer;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<div class='dgok' data-fn='abc'>OK</div>

结果:错误 fn 不是函数...

有办法做到这一点吗?

lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum

最佳答案

动态访问函数名称通常是一种代码味道,但如果您的 abc 位于顶层,则可以访问 window[fnName],其中 fnName 是包含函数名称的字符串。精确的变量名称​​很重要 - 您的fn不是一个函数,而是一个字符串,因此最好将其命名为更清楚的名称一个字符串(通过尝试调用它来减少混淆的可能性)。例如:

$('.dgok').click(function() {
  var fnName = $(this).attr('data-fn');
  window[fnName]();
});
function abc() {
  console.log('abc');
}
.dgok {
  cursor: pointer;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<div class='dgok' data-fn='abc'>OK</div>

如果您的 abc 不在顶层,window[fnName] 将不起作用 - 使用按函数名称索引的对象相反:

(() => {
  const fns = {
    abc: () => console.log('abc')
  };
  $('.dgok').click(function() {
    var fnName = $(this).attr('data-fn');
    fns[fnName]();
  });
})();
.dgok {
  cursor: pointer;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<div class='dgok' data-fn='abc'>OK</div>

关于jquery - 触发一个以 name 作为变量名的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52564671/

相关文章:

javascript - 在 TinyMCE 启动后绑定(bind) onkeydown

jquery 鼠标悬停

php - 通过 PHP、HTML5、jQuery 使用语音控制 Web 表单?

javascript - Jquery 提取 json 表示 {41 : Array[2], 42: Array[1]}

javascript - 附加元素的输入更改时事件不会触发

Javascript变量设置-列表项

javascript - 图标保持隐藏状态,直到有东西被移到那里

javascript - 自定义/隐藏分页导航

jquery - 如何将 jQuery get 方法与 ASP.NET MVC Controller 操作一起使用?

jquery - 使用 JQuery 访问由 chrome 扩展注入(inject)的 iframe