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ため、常にを受け取ります。

于 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 に答える