1. ホーム
  2. javascript

[解決済み] Knockout JSのデータバインドをロストフォーカスの代わりにキープレスで行うにはどうしたらいいですか?

2022-04-19 05:38:05

質問

この例では ノックアウトjs は、フィールドを編集して TAB キーを押したときに、ビューモデルのデータ、つまりフィールドの下のテキストが更新されるように動作します。

キーを押すたびにビューモデルのデータが更新されるように、このコードを変更するにはどうしたらよいでしょうか。

<!doctype html>
<html>
    <title>knockout js</title>
    <head>
        <script type="text/javascript" src="js/knockout-1.1.1.debug.js"></script>
        <script type="text/javascript">
        window.onload= function() {

            var viewModel = {
                firstName : ko.observable("Jim"),
                lastName : ko.observable("Smith")
            };
            viewModel.fullName = ko.dependentObservable(function () {
                return viewModel.firstName() + " " + viewModel.lastName();
            });

            ko.applyBindings(viewModel);
       }
        </script>
    </head>
    <body>
        <p>First name: <input data-bind="value: firstName" /></p>
        <p>Last name: <input data-bind="value: lastName" /></p>
        <h2>Hello, <span data-bind="text: fullName"> </span>!</h2>
    </body>
</html>

解決方法は?

<body>
        <p>First name: <input data-bind="value: firstName, valueUpdate: 'afterkeydown'" /></p>
        <p>Last name: <input data-bind="value: lastName, valueUpdate: 'afterkeydown'" /></p>
        <h2>Hello, <span data-bind="text: fullName"> </span>!</h2>
</body>

から ドキュメント

追加パラメータ

  • 値更新

    バインディングにvalueUpdateというパラメータも含まれている場合、これは は、KO が変更を検出するためにどのブラウザイベントを使用すべきかを定義します。どの 以下の文字列値は、最も一般的に有用な選択肢です。

    • change"(デフォルト) - ユーザーが の場合は、フォーカスを別のコントロールに移動します。 要素に変更があった場合、その直後

    • keyup" - ユーザーがキーを離したときにビューモデルを更新します。

    • "keypress" - ユーザーが入力したときに、ビューモデルを更新します。 キーです。keyupとは異なり、ユーザがキーを押している間、繰り返し更新されます。 ダウン

    • afterkeydown" - ユーザーの操作と同時にビューモデルを更新します。 文字を入力し始める。この機能は、ブラウザの キーダウンイベントを非同期で処理します。

これらのオプションのうち、"afterkeydown" は、次のような場合に最適な選択肢です。 は、ビューモデルをリアルタイムで更新し続けます。