0

type = "password"の入力フィールドがブラウザのauto-fill-modeによって入力された場合、パスワードの監視可能な値は常に未定義です。ユーザー名フィールドに最初の文字を入力し、ドロップダウンリストから名前を選択するだけです。パスワードフィールドはブラウザによって入力されます。

<script type="text/javascript">
        $(document).ready(function () {
            var viewModel = function () {
                var self = this;
                self.UserName = ko.observable();
                self.Password = ko.observable();
                self.Submit = function () {
                    var un = self.UserName();
                    var pw = self.Password(); // Password value is undefined!!!!
                    alert(pw);
                };
            };

            ko.applyBindings(new viewModel());
        });
    </script>


<form id="LoginForm" data-bind="submit: Submit">
<fieldset>
    <label for="UserName">Username</label>
    <input id="UserName" data-bind="value: UserName" name="UserName" type="text" />

    <label for="Password">Password</label>
    <input id="Password" data-bind="value: Password" type="password" />
    <button type="submit">Login</button>
</fieldset>
</form>
4

1 に答える 1

1

モデルが表示している動作は、KnockoutモデルがonChangeイベント中に更新され、入力が自動入力されたときにonChangeイベントを受け取らないためだと思います。これに対する唯一の回避策は、送信時にonChangeイベントを手動でトリガーすることでした。

self.Submit = function () {
    var un = self.UserName();
    $("#Password").trigger("change");
    var pw = self.Password(); // Password value is no longer undefined!!!!
    alert(pw);
};

この質問から得たこのソリューション(テスト済みで動作)は、jQueryに依存しています。jQueryソリューションが必要ない場合は、リンクされた質問で他のいくつかのソリューションも提供されます。

于 2013-02-20T17:13:31.977 に答える