2009-09-05 7 views
20

jQueryの使用既存の関数をボタンにバインドします。私は、ドキュメントを進めてきたとバインド方法を発見したが、jQueryの上の例では、私はすでに、ハードコーディングされています機能をバインドすると、新しく作成された機能、例えばバインド:jQueryで既存のJavaScript関数をバインドする

function fHardCodedFunction(){ 
    //Do stuff 
} 

function fBindFunctionToElement(){ 
    $("#MyButton").bind("click", fHardCodedFunction()); 
} 


が可能これです?それとも私はこれについて間違った方法をとっていますか?

+0

これはjQuery APIドキュメントの関連セクションです: [** Multiple Selector **](https://api.jquery.com/multiple-selector/) – informatik01

答えて

33

プレーンfHardCodedFunctionはすでに関数を参照しており、接尾辞()はこれを単に呼び出します。だから代わりにそれを呼び出すことにより、単に戻り値を渡す関数を渡す:

function fBindFunctionToElement(){ 
    $("#MyButton").bind("click", fHardCodedFunction); 
} 
+3

ハードコードされた関数を渡す必要がある場合はどうすればいいですか?パラメータ? –

+10

@Jack Mills:次に、 'function(){return fHardCodedFunction(" foo "、" bar ")のような(匿名の)ラッピング関数を使う必要があります。 } 'あなたは' bind'にコールバック関数として渡します。 – Gumbo

+0

これは私がやろうとしていることです(私は代わりに.click()を使っていますが、私が知る限りは同じです)。しかし、私のバインドされた関数は動作していません - バインドされた関数はclick()関数と同じ変数にアクセスできますか?または、文法 '$("#mydiv ")を使用しているときに、関数に渡される隠し変数がありますか? –

2

はい、あなたがどこかに書かれたメソッドをバインドすることができますが、括弧を無視する必要があります。

function fHardCodedFunction(){ 
    //Do stuff 
} 

function fBindFunctionToElement(){ 
    $("#MyButton").bind("click", fHardCodedFunction); 
} 
+0

ハードコードされた関数にパラメータを渡す? –

4

借入から次のように他の記事は、あなたのイベントハンドラをパラメータ化することができます

function fHardCodedFunction(someValue) { 
    alert(this.id + " - " + someValue); 
} 


function fBindFunctionToElement() { 
    var someValue = "whatever"; 
    $("#MyButton").bind("click", 
     function() { 
     fHardCodedFunction.apply(this, [someValue]); 
     } 
); 
} 


$(document).ready 
(
    function() { 
    fBindFunctionToElement(); 
    } 
); 

を私はここに適用されます使用している機能fHardCodedFunctionに私がをたいと思いますので、 210プロパティを使用して、MyButton要素を参照します。また、applyは2番目のパラメータの配列を期待していることに注意してください。そのため、私はsomeValueを角かっこで囲みました。

この方法で行う必要はなく、好きな場合はこのthisのプロパティをすべて忘れることができます。

関連する問題