0

我创建了一个 jquery 函数,但如果函数名在字符串中,$.isFunction 似乎总是返回 false。

(function( $ ) {
    $.myTest = function() {
       return true;
    }
})( jQuery );

alert($.isFunction('$.myTest'));

小提琴:这里

注意:如果我删除引号(例如alert($.isFunction($.myTest));,它可以工作,但我的函数在字符串中。

编辑

这个函数名在一个字符串中,因为我创建了一个插件来从 dom 元素中的参数创建 ajax。例如 :

        data-route="xxx.php"
        data-lock=".buttonsToLock"
        data-output="#outputContainer"
        data-callback-after="$.myTest"

但我无法检查是否data-callback-after是现有功能。

任何的想法?

谢谢

4

3 回答 3

6

您应该始终将对象传递给$.isFunction()方法:

alert($.isFunction($.myTest));

否则,您将始终收到false,因为默认情况下string 不是函数

于 2012-10-25T11:56:13.567 回答
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));

http://jsfiddle.net/JqCzH/2/

于 2012-10-25T12:10:57.107 回答
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]);
于 2012-10-25T12:09:50.660 回答