2012-04-13 3 views
4

関数Yの引数に関数名(X)を渡し、関数Yに関数Xを発生させるイベントハンドラを作成させます。関数名を渡してイベントハンドラで使用する

私は次のことを作成するためにYを機能します:

$('#form').submit(function(e){e.preventDefault();X();}); 

私が試した:

var name="X()"; 
X(name); 

function Y(id){ 
    $('#element').submit(function(e){e.preventDefault();id;}); 
} 

これ、予想通り、動作しません。しかし、(1)私のやり方でやっても、(2)全体のX関数wholus-bolusをYに渡すこともできますか?

ありがとうございました。

+0

可能重複[Javascriptのカスタムコールバックを作成します](http://stackoverflow.com/questions/2190850/javascript-create-カスタムコールバック) – ManseUK

答えて

12

here's a demo if you feel doubtful skeptical (sounds better) :D

//create x 
function x(){ 
    alert('im from x'); 
} 

//create y that receives the function 
function y(callback){ 

    //bind your handler which calls callback (which was x) 
    $('element').submit(function(){ 
     callback(); 
    }); 
} 

//call y that sends over a reference of x 
y(x); 
+0

疑問も懐疑的でもありませんでした:)変数として関数名を渡していたため、すぐには機能しませんでした(var a = "my_function"; y(a);)関数自体を渡すのではなく、再度、感謝します。 – Nick

1

あなたのXのオブジェクトは、機能ではなく、文字列でなければなりません。

function X() { /*code*/ } 

Xの末尾にfalseを返すことで、デフォルトのアクションを防ぐことができます。

function X() { 
    /*code*/ 
    return false; 
} 

そして、あなたはこのような別の関数内で使用することができます:

function Y(callback){ 
    $('#element').submit(callback); 
} 
Y(X); 
+0

文字列に関数名ではなく関数自体を渡す必要があることを明確にすることは非常に便利でした。ありがとう。 – Nick

関連する問題