2011-08-09 19 views
1

jQueryの関数が存在するかどうかをチェックする関数が必要です。この関数が必要な場合は、この関数を呼び出す必要があります。単純な名前で以下のコードを使用すると機能しますが、関数が存在するかどうかを動的にチェックしたい場合は機能しません。誰かにアイデアを持っていますか?チェック機能が動的に存在するかどうかを調べる

function homeController() { 
    console.log('in the homecontroller'); 
} 

$('div[class="view"]').each(function() { 
     $('#' + this.id).live('pageshow', function() { 
      var func = this.id + 'Controller';    
      if($.isFunction(func)) { 
       console.log('jquery exists'); 
      } 
     }); 
    }); 
+0

任意のJavaScript関数がスコープに含まれているかどうかをテストしたいのですか?もちろん、 'func'はあなたの例では文字列であり、関数ではありません。 –

答えて

3

オブジェクトが関数であるかどうかをチェックするためにjQuery.isFunction()メソッドを使用します。

$('div[class="view"]').each(function() { 
     $('#' + this.id).live('pageshow', function() { 
      var func = eval(this.id + 'Controller');    
      if($.isFunction(func)) { 
       console.log('jquery exists'); 
      } 
     }); 
    }); 
1

私はあなたのfuncが文字列であるので、そのためにevalを使用する必要があると思います。

あなたは(あなたの関数がの性質である、オブジェクト、または他の言葉で)あなたの関数がどの範囲を把握し、必要なの名前を変換する

if ($.isFunction(scope[func])) { 
    ... 
} 

を使用する必要が

var func = eval(this.id + 'Controller'); 
if($.isFunction(func)) { 
    func(); 
} 
+0

"eval"を使用すると、関数が実行され、関数が存在しないときにエラーがスローされるので、別の方法が必要です。 –

+0

最後に括弧 '()'を入れないと、実行されず、その値だけが取得されます。 – jcubic

+0

私は最後にカッコを入れませんが、私の場合は "listController"というエラーはまだありません。 –

0

関数を現在のスコープ内のその関数への参照に変換します。

あなたの機能は、実際にはのスコープ内にあることを前提としています。

したがって、homeController()関数がグローバルスコープで宣言されている場合は、グローバルオブジェクトwindow.のプロパティになります。

しかし、他のクロージャーでは内部関数として宣言されたばかりのものはありません。

1

$ .isFunction - "渡された引数がJavascript関数オブジェクトであるかどうかを判断する"。明らかに、あなたは文字列を渡しています。

if (typeof jQuery[yourFunctionName] == 'function') { .. 

と一般的なJavaScriptの機能のために使用するよりも、あなたはjQueryプラグインをチェックしたい場合 -

if(typeof window[yourFunctionName] == 'function') { .. 
0
function doIt(callback) { 

    console.log('Did it'); 

    typeof callback === 'function' && callback(); 

} 

関数が存在する場合にのみ、コールバックを実行します。あなたはこの関数からその行を引っ張ってどこにでも使用できます。

0

Reflection-javaを使用すると、メソッドやフィールド、クラスが存在するかどうかを動的にチェックすることもできます。 詳細については、 How To Check If A Method Exists At Runtime In Java?

+0

これはJavaではなくJavaScriptですか? – matsjoyce

関連する問題