4

表の行 ( <tr>) には、いくつかの入力要素があります。

tr がフォーカスを失ったときに JavaScript コードを実行する必要があります (ただし、ユーザーが同じ tr 内の別の入力要素に切り替えたときは必要ありません)。

jQueryを使用しています。

クロスブラウザで行うには?

4

1 に答える 1

14

このアプローチを探していると思います(demo、 Chr/Ff/IE10 でチェック):

var delayedFn, blurredFrom;
$('tr').on('blur', 'input', function(event) {
    blurredFrom = event.delegateTarget;
    delayedFn = setTimeout(function() {
        console.log('Blurred');
    }, 0);
});
$('tr').on('focus', 'input', function(event) {
    if (blurredFrom === event.delegateTarget) {
        clearTimeout(delayedFn);
    }
});

ご覧のとおり、「真のぼかしハンドラー」(console.logこの例では関数)の呼び出しを遅延させsetTimeout、フォーカスが同じ行に留まっている場合は、このタイムアウトをクリアします。

closest(tr)ここでは委任を使用するため、毎回呼び出す必要はありません。ただし、ハンドラーはテーブルに動的に追加された入力を正しく処理するため、別の副作用があります。

于 2013-06-02T18:42:52.853 に答える