live()
focus イベントと blur イベントは他の DOM イベントのように伝播 (バブル) しないため、jQuery のメソッドは機能しません。jQuery チームは最終的にこの機能を導入する予定ですが、人為的 (手動バブリング) にする必要があります。
jQuery を使用していなくても、live()
イベント キャプチャをサポートしているブラウザ (ほとんどの非 IE ブラウザ) で使用し、IE ではonFocusIn
/onFocusOut
イベントを使用します (これらのイベントは、フォーカス/ぼかしとは異なり、バブルを発生させます)。 )。
次に例を示します。
function onFocus(el, fn) {
var outerFn = function(e) {
e = e || window.event;
if ((e.target || e.srcElement) === el) {
fn.call(el);
}
};
if (document.body.addEventListener) {
// This is event capturing:
document.body.addEventListener('focus', outerFn, true);
} else {
// This is event delegation:
document.body.attachEvent('onfocusin', outerFn);
}
return outerFn;
}
それを使用して:
onFocus(document.getElementById('myInputField'), function(){
log('FOCUSED!!!');
});
同様の抽象化は、blur イベントと change イベントに使用できます。
イベントの順序 (キャプチャ/バブリング) について詳しくは、http ://www.quirksmode.org/js/events_order.html をご覧ください。
また、jQuery プラグインである liveQuery が機能することも注目に値するかもしれません。これは、イベントを新しい要素に再バインドするためです。「append」、「insertBefore」などの jQuery の DOM 操作メソッドでのみ機能します。したがって、jQuery を使用せずに新しい要素を追加すると、機能しません。