我有一个变量名称,我将其传递给插件,但该变量实际上是一个函数。 我使用jquery $ .isFunction来检查它是否是一个函数,如果是,它应该执行该函数。
但我似乎无法使其成功,我在jsfiddle中提供了一些例子:http://jsfiddle.net/tZ6U9/8/
但这是一个示例代码:
HTML
<a class="one" href="#">click</a><br />
<a class="two" href="#">click</a><br />
<a class="three" href="#">click</a><br />
JS
$(document).ready(function() {
help = function(var1) {
alert(var1);
}
function help2(var1) {
alert(var1);
}
$('a.one').click(function() {
var functionName = "help";
if ($.isFunction([functionName])) {[functionName]("hello");
} else {
alert("not a function");
}
return false;
});
$('a.two').click(function() {
var functionName = "help";
if ($.isFunction(functionName)) {
functionName("hello");
} else {
alert("not a function");
}
return false;
});
$('a.three').click(function() {
var functionName = "help2";
if ($.isFunction(functionName)) {
functionName("hello");
} else {
alert("not a function");
}
return false;
});
$('a.four').click(function() {
var functionName = "help2";
if ($.isFunction([functionName])) {[functionName]("hello");
} else {
alert("not a function");
}
return false;
});
});
正如你所看到的,我厌倦了一堆东西,但所有错误的东西可能...... 我从其中激励了一些人:jQuery - use variable as function name
总体 我传递一个与函数同名的变量,使用jquery来检查它是否是一个函数,如果是,它应该执行函数。
提前感谢您的帮助。
答案 0 :(得分:13)
如果您想通过其名称字符串调用函数,请使用window
。
var functionName = "help";
if ($.isFunction(window[functionName])) {
window[functionName]("hello");
} else {
alert("not a function");
}
答案 1 :(得分:1)
检查Fiddle以获取工作示例。
示例只有一个链接正常工作。同样地制作其他链接。
编辑:首次评论后
<强> HTML 强>
<a class="one" href="#">click</a><br />
<强> JS 强>
var help = function(var1) {
alert(var1);
}
$(document).ready(function() {
$('a.one').click(function() {
var functionName = help;
if ($.isFunction(functionName)) {
functionName('test');
} else {
alert("not a function");
}
return false;
});
});
答案 2 :(得分:1)
您可以使用以下命令调用窗口/全局范围中定义的函数,例如函数help
:
if ($.isFunction(window[functionName])) {
window[functionName]("hello");
}
另一方面, help2
不可以通过这种方式访问,因为您在闭包中定义它。可能的解决方案是定义.ready()
处理程序的外部的函数。然后,您可以使用window[functionName]
来调用它:
var namespace = {
help: function (var1) {
alert(var1);
},
help2: function (var1) {
alert(var1);
}
}
$(document).ready(function() {
var functionName = "help";
if ($.isFunction(namespace[functionName])) {
namespace[functionName]("hello");
}
});
<强> DEMO 强>