0

ビューモデルのviewAttached(DOMロード後)内には、次のものがあります。

viewAttached: function () {
            $('.auth-input').keydown(function (e) {
                debugger;
                var check = auth.showRegistering();
                var code = (e.keyCode ? e.keyCode : e.which);
                if (code == 13 && auth.showRegistering()) {
                    alert("trying!");
                    auth.register();
                }
                else if (code == 13 && auth.showRegistering() == false) {
                    auth.logIn();
                }
            });
        },

これは、if ステートメントの背後に隠されているフィールドを除くすべてのフィールドでうまく機能します。

<input data-bind="value: email" class="span2 auth-input" type="text" placeholder="Email">
<input data-bind="value: password" class="span2 auth-input" type="password" placeholder="Password">
<!-- ko if: showRegistering -->
<input data-bind="value: passwordConfirm" class="span2 auth-input" type="password" placeholder="Password Confirm">
<!-- /ko -->

最初の 2 つの入力は DOM の読み込み時に表示されますが、他のフィールドは最初は表示されないため、keydown アクションは認識しているようです。

これは、私が何をしようとしているのかを示すために、フィドルを取り除いたものです:

http://jsfiddle.net/PTSkR/41/

その3番目の入力でキープレスをキャッチする方法はありますか?

4

2 に答える 2

1

この問題は、モデルがバインドされるまで、ノックアウト 'if' バインディングによって passwordConfirm 入力がレンダリングされないために発生します。

これは、jquery を使用する代わりにノックアウトを使用して keydown イベントをバインドすることで解決できます。

これをモデルに配置します。

OnKeyDown: function (data, e) {
    debugger;
    var check = auth.showRegistering();
    var code = (e.keyCode ? e.keyCode : e.which);
    if (code == 13 && auth.showRegistering()) {
        alert("trying!");
        auth.register();
    }
    else if (code == 13 && auth.showRegistering() == false) {
        auth.logIn();
    }
};

バインディングを次のように変更します。

<input data-bind="value: passwordConfirm, event: {keydown:OnKeyDown}" type="password" />
于 2013-05-01T23:14:55.933 に答える
0

DOM 要素が存在するかどうかわからない場合は、イベント委任を使用できます。jQuery を使用すると、これが非常に簡単になります。

$(document.body).on('keydown', '.auth-input', function (e) {
    var code = e.which;
    if (code == 13) {
        alert("trying!");
    }
});

実際の例については、こちらを参照してください: http://jsfiddle.net/PTSkR/45/

また、jQuery docsで推奨されているように、 e.which を使用して文字コードを取得します。

于 2013-05-01T23:13:49.613 に答える