我创建了一个jquery函数,但是如果函数名在字符串中,$ .isFunction似乎总是返回false。
(function( $ ) {
$.myTest = function() {
return true;
}
})( jQuery );
alert($.isFunction('$.myTest'));
小提琴:here。
注意:如果我删除引号(例如。alert($.isFunction($.myTest));
,它会起作用,但我的函数在字符串中。
这个函数名在一个字符串里面,因为我创建了一个插件来从dom元素中的参数创建ajax。例如:
data-route="xxx.php"
data-lock=".buttonsToLock"
data-output="#outputContainer"
data-callback-after="$.myTest"
但我无法检查data-callback-after
是否为现有功能。
有什么想法吗?
由于
答案 0 :(得分:6)
答案 1 :(得分:2)
函数将存储在window
中,因此您可以尝试这样的事情:
$.isFunction(window['myTest']);
但是,既然你正在使用“命名空间”,你需要这样做:
$.isFunction(window['$']['myTest']);
或者您可以使用此功能:
function isFunctionByName(functionName, context) {
var namespaces = functionName.split(".");
var func = namespaces.pop();
for(var i = 0; i < namespaces.length; i++) {
context = context[namespaces[i]];
}
return $.isFunction(context[func]);
}
alert(isFunctionByName("$.myTest", window));
答案 2 :(得分:1)
看起来你试图动态调用函数/回调。
您应该考虑以下方法。
(function( $ ) {
window.myTest = function() {
return true;
}
})( jQuery );
var data-route="xxx.php",
data-lock=".buttonsToLock",
data-output="#outputContainer",
data-callback-after="myTest";
// To run the function
window[data-callback-after]();
// To test the function
$.isFunction(window[data-callback-after]);