0

如果 type="password" 的输入字段被浏览器的自动填充模式填充,则密码可观察值始终未定义。我只在用户名字段中输入第一个字符,然后从下拉列表中选择名称。密码字段由浏览器填写。

<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 回答