0

セットアップは次のとおりです。

オブザーバブルにバインドされたテキストボックスがあります。

オブザーバブルは、テキストボックスの変更イベントでテキストボックスから値を取得します。これは、ぼかしで発生します (または、考慮していない「valueUpdate: afterkeydown」などの他のいくつかのイベント)。

私が必要とするのは、Enter キーを押したときにも発生させることです。つまり、Enter キーを押すと、テキスト ボックスの現在の値が取得され、オブザーバブルにプッシュされます。

そこで、テキスト ボックスのキーダウン イベントをリッスンするバインディングを作成し、スキャン コードが 13 の場合はそれを実行します。ここが定かではないところです。説明させてください:

この時点で、何らかの形で変更イベントが発生する必要がありますが、それを直接制御することはできません。つまり、要素に対して明示的に変更イベントを発生させることはできません。代わりに、ぼかしてテキストボックスに再び焦点を合わせ、変更イベントが自然に発生するようにします。このぼかし/フォーカスは機能しますが、抑制が難しい望ましくない副作用が発生します..

したがって、私が最終的に探しているのは、現在の値をテキストボックスから「入力」バインディング内のオブザーバブルに伝播し始める方法です。これは、フォーカスを失ったときに発生する変更イベントを効果的にシミュレートしますが、フォーカスを失うことはありません (ぼかしを行う)

4

2 に答える 2

1

おそらく、オブザーバブルの代わりに値バインディングを直接更新する必要があるようです。

ko.bindingHandlers.value.update(element, valueAccessor, allBindingsAccessor);

それはあなたが望んでいることをするはずです。

于 2012-10-25T21:31:51.470 に答える
1

これを試して。

ko.bindingHandlers.returnKey = {
   init: function(element, valueAccessor, allBindingsAccessor, viewModel) {
      ko.utils.registerEventHandler(element, 'keydown', function(evt) {
        if (evt.keyCode === 13) {
           //evt.preventDefault();
           //evt.target.blur();
           valueAccessor(element.value);
        }
      });
    }
};

次に、あなたのhtmlは

<input type="text" data-bind="value:message, returnKey:message" />

デモをチェック

于 2012-10-25T16:11:01.590 に答える