如果我在网页上有这样的元素......
<span data-function="DoSomething">Click</span>
...我把它放在我的页面标题中......
$(document).ready(function()
{
$('[data-function]').each(function()
{
var fName = $(this).attr('data-function');
$(this).click(fName);
});
});
......代替注释的内容会产生执行名为“DoSomething”的函数所需的效果。
注意: 我上面的代码没有用,我的问题是如何使这项工作(将'DoSomething'翻译成DoSomething();)
任何想法的人?
答案 0 :(得分:3)
这些功能应该可用。尝试将它们放在一个Object中,如下所示:
$(document).ready(function()
{
var fns = {
DoSomething: function() {/* ... */},
DoAnotherthing: function() {/* ... */}
};
$('[data-function]').each(function()
{
var fName = $(this).attr('data-function');
$(this).click(fns[fName]);
});
});
这是a jsfiddle,演示了一种方法,可以将所有内容保存在一个命名空间中,并根据元素的data
属性分配处理程序。
答案 1 :(得分:2)
尝试使用window object调用函数 -
$(document).ready(function() {
$('[data-function]').each(function() {
var fName = $(this).attr('data-function');
if (typeof (window[fName]) === "function") {
$(this).click(window[fName]);
}
});
}
答案 2 :(得分:1)
您可以使用类似
的内容$(this).click(window[fName]);
如果在全局范围内未定义函数window
,DoSomething
将被适当的表达式替换。
答案 3 :(得分:0)
也许有点干净的方式:
var myfuncs = {
alert : function() {
alert("An Alert");
},
changeName: function(obj) {
$(obj).text('Other Text');
}
};
$('[data-function]').on('click', function()
{
value = $(this).data('function');
if (myfuncs.hasOwnProperty(value)) {
myfuncs[value](this);
}
});