jquery - 使用数据属性调用函数
问题描述
<div class='cmenu esc' id='cma'>
<div class='cmitem' data-fn='itemcut'>CUT</div>
<div class='cmitem' data-fn='itempaste'>PASTE</div>
<div class='cmitem' data-fn='itemdel'>DELETE</div>
</div>
js
$('.cmitem').click(function(){
var fn = $(this).attr('data-fn');
$(window)[fn]();
});
function itemcut(){
console.log('test');
}
错误:
Uncaught TypeError: $(...).fn is not a function
那么如何以这种方式调用函数呢?
解决方案
jQuery 不直接公开 Element 属性。您必须使用attr()
or prop()
ordata()
方法。但是,在这种情况下,在窗口上使用 jQuery 是没有意义的。直接引用就好了。
$('.cmitem').click(function() {
//changed to use data() rather than attr()
var fn = $(this).data('fn');
var targetFunction = window[fn];
//added some safety checking
if (typeof targetFunction === 'function') {
targetFunction();
}
});
function itemcut() {
console.log('test');
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class='cmenu esc' id='cma'>
<div class='cmitem' data-fn='itemcut'>CUT</div>
<div class='cmitem' data-fn='itempaste'>PASTE</div>
<div class='cmitem' data-fn='itemdel'>DELETE</div>
</div>
推荐阅读
- bash - 根据过滤器列出特定的 git 分支
- javascript - 为什么随机类的构造函数等于原生 Function 对象?
- java - 序列化和反序列化具有相同名称的 Jackson XML 元素
- node.js - 填充更多的猫鼬集合字段导致节点js api中的响应时间延迟
- azure - Azure DevOps REST API - 从每个成员获取容量栏
- android - Android如何创建隐藏文件?
- python - 如何在文件操作中编写两个装饰器
- protractor - 如果一个 Expect 在量角器中失败,规范执行会继续吗?
- python - from_formula() 缺少 2 个必需的位置参数:“公式”和“数据”
- javascript - BeforeEach 中的 Jest 闭包