20


9

jQueryを使って既存の関数をボタンにバインドしたいです。 私はドキュメントを見てきましたが、bindメソッドを見つけましたが、jQueryの例では、すでにハードコーディングされた関数をバインドしたいときに、新しく作成された関数をバインドします。

function fHardCodedFunction(){//処理を行う}

function fBindFunctionToElement(){$( "#MyButton")。bind( "click"、fHardCodedFunction()); }
 +
これは可能ですか? それとも私はこれについて間違ったやり方をしていますか?

3 Answer


33


プレーンな fHardCodedFunction`はすでに関数を参照しており、接尾辞() `はそれを呼び出すだけです。 そのため、関数を呼び出して戻り値を渡す代わりに、関数を渡すだけです。

function fBindFunctionToElement(){$( "#MyButton")。bind( "click"、fHardCodedFunction); }


4


他の記事から借りて、次のようにイベントハンドラをパラメータ化できます。

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

function fBindFunctionToElement(){var someValue = "whatever"; $( "#MyButton")。bind( "クリック"、function(){fHardCodedFunction.apply(this、[someValue]);}); }

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

私はここでapplyを使っています。なぜなら関数 fHardCodedFunction`では this`プロパティが `MyButton`要素を参照したいのです。 applyが2番目のパラメータの配列を期待していることにも注意してください。これが `someValue`を角括弧で囲んだ理由です。

このようにする必要はありませんし、望むならこのthisプロパティを完全に忘れることができます。


2


はい、他の場所に書かれたメソッドをバインドできますが、括弧は無視してください。

function fHardCodedFunction(){//処理を行う}

function fBindFunctionToElement(){$( "#MyButton")。bind( "click"、fHardCodedFunction); }