自动填充表单(Norton Identity Safe)不更新 Knockout 可观察值

Autofill form form (Norton Identity Safe) not updating Knockout observable value

我有一个使用 Knockout.js 作为 ts 值的登录表单。

精简示例代码:

<input id="username" placeholder="Email" data-bind="textInput: Profile.Email" required />
<input id="password" type="password" placeholder="Password"  data-bind="textInput: Profile.Password" required />

var Profile = function () {
    self.Email = ko.observable('');
    self.Password = ko.observable('');
}

当密码管理器 Norton Identity Safe 等程序自动填充您的登录信息时(我无法验证自动填充的其他来源)Profile.Email 和 Profile.Password 的可观察值不要得到更新。如果我单击该框并给予该字段焦点,然后离开该字段,该值仍未更新。只有当我添加或删除一个字符时,该字段才会更新。

我在这里看到了一些关于如何 "hack" a way around 这个的其他帖子,但它们都是 KO 3.2.0 之前的版本,其中包括 textInput 绑定,看起来应该可以解决这个问题,然而事实并非如此。

是否有任何原因导致 textInput 不更新自动填充时的可观察值,是否有任何新的方法来获取更新值而不是 "hacky"。

除非触发 change() 触发器,否则 Knockout 将看不到更新的输入值。这是一个你可以玩的小演示。如果选中该复选框,则 change 触发器会在值更新后触发,然后可观察值会发生变化。

vm = {
  uname: ko.observable('initial'),
  changeIt: function() {
    var $el = $('#username').val('changed!');
    if (vm.doTrigger()) {
      $el.change();
    }
  },
  doTrigger: ko.observable(false)
};
ko.applyBindings(vm);

vm.uname.subscribe(function(newValue) {
  console.debug("Changed:", newValue);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script>
<input id="username" data-bind="textInput: uname" />
<div data-bind="text:uname"></div>
<button data-bind="click:changeIt">Change It</button>
Trigger it: <input type="checkbox" data-bind="checked: doTrigger" />

另请参阅: Update field with jquery don't update observable