「外側」は、 jQuery を使用bind
してイベント ハンドラーをイベントにバインドします。focus
「内部」Function.bind
は、特定のコンテキストにバインドされた関数を作成しています (this
関数が呼び出されたときにそのコンテキストと等しくなります)。これにはフレームワークは必要ありません (ただし、最新のブラウザーが必要です)。
したがって、この場合、 への呼び出しは、フォーカスFunction.bind
されるたびに、メソッドのコンテキストが現在の値(おそらく使用しているウィジェット/コンポーネント) に設定されるようにします。これは通常、イベントが発生した要素であるため、必要です。input
onInputFocus
this
MDN の記事にFunction.bind
は、これについての適切な説明があります。
これがどのように機能するかをよりよく説明するために、簡単な例を取り上げます。
HTML:
<button id="test" type="button">Test</button>
<button id="test2" type="button">Test 2</button>
<div id="target"></div>
JavaScript :
var fill = function() {
$(this).css('background-color', 'yellow');
};
/* button#test will be colored yellow */
$("#test").bind("click", fill);
/* div#target will be colored yellow */
$("#test2").bind("click", fill.bind($("#target")));
最初のイベント バインディングでは、fill
が呼び出されthis
て設定され#test
ます (クリックされた要素であるため)。
2 番目でfill
は、再度呼び出されますが、イベント バインディングの内部への呼び出しのために にthis
設定されます。#target
Function.bind
例: http://jsfiddle.net/GK7L8/