4

Backbone.js を使用したコードのビュー部分は次のようになります。

var myView = Backbone.View.extend({

    events: {
        'focus .cell input'     : "updateCurrentCell"
    },
    updateCurrentCell: function(event) {
        console.log('updateCurrentCell called');
        // Update the current cell.
    }
}

入力要素がフォーカスされるたびに、関数が 2 回呼び出されます。を使用してスタックトレースを印刷してみましたconsole.trace()。関数呼び出しがfocusイベントから発生し、次回はfocusinから発生したことを示しています。

これらのイベントのいずれかが発生するのを防ぐ方法を見つけようとする私の試みは、私をどこにも導きません。どうすればこれを修正できますか?

4

1 に答える 1

7

Backbone.View は、delegateEventsを使用して、イベント オブジェクトにリストされているイベントをバインドします。sourceを見ると、それがjQuery.delegatedelegateEventsを使用していることがわかります。

おそらく関連する.focus()のjqueryドキュメントにメモがあります:

フォーカス イベントは、Internet Explorer ではバブルしません。したがって、フォーカス イベントによるイベント委任に依存するスクリプトは、ブラウザー間で一貫して動作しません。ただし、バージョン 1.4.2 の時点で、jQueryは、イベント委譲メソッド .live() および.delegate()でフォーカスを focusin イベントにマッピングすることにより、この制限を回避します。

理論的には、これは問題なく動作するはずですが、両方を取得しているため、おそらく.focusin()イベントをリッスンすることもできます。これは、バブリング.delegate()がリッスンし、jQuery がリッスンするイベントの種類をサポートしているためです。とにかく「フォーカス」をマップしようとしています。

于 2011-08-10T17:14:44.620 に答える