1

行がクリックされたときに呼び出される編集メソッドがあり、編集用の情報を設定します(フォーカス呼び出し、簡単に入力できる呼び出しの選択)...次の編集を呼び出さなくてもすべて正常に機能します(人が最後に到達したとき)行の要素で、監視可能な配列で次の要素を検索します...存在する場合は、同じメソッドを再度呼び出すことで次の要素に移動します)。

問題は、このメソッドが呼び出されると、要求をメモリにスタックし、連続するすべての呼び出しを実行することです。jqueryメソッドでは、unbindメソッドを呼び出して、同じメソッドへの以前の呼び出しを解放できることを知っていますが、ノックアウト再帰関数に対してこれを行うための最良の方法はわかりません。

助言がありますか?

ここにフィドルがあります:

51行目の呼び出し、

self.editItem(self.items()[index + 1]);

は、editItemをリストの次の項目に呼び出す再帰呼び出しです... 26行目に、editItemメソッドが実行されたときに呼び出され、実行の違いを示すアラートがあります。行をクリックして他の行をクリックすると、正常に機能し、適切に選択されます。ただし、右側の最後のフィールド(次に使用可能なアイテムを選択するとき)でタブを押すと、スタックし始めます。

4

1 に答える 1

2

.live新しいキーダウン コールバックが呼び出されるたびeditItemに、以前のコールバックのスタックに追加されるため、ここでは委譲メソッドを使用しないでください。

したがって、変更する必要があるのは次の 2 つだけです。

// change .live('keydown', ...) to .keydown(...) or .bind('keydown', ...)
$('#itemDescriptionEdit').keydown(function (e) {

    // ...

    // and return false at the end of callback to stop event propagation
    return false;
});

更新されたフィドル: http://jsfiddle.net/ostgals/GmZjF/4/

于 2013-02-19T19:46:08.740 に答える