2015-11-23 1 views
1

J'ai un formulaire de connexion qui utilise Knockout.js pour les valeurs ts.Formulaire de remplissage automatique (Norton Identity Safe) non mis à jour valeur observable Knockout

Démonté exemple de code:

<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(''); 
} 

Lorsqu'un programme comme Norton Identity Safe, un gestionnaire de mot de passe, AutoFills vos informations de connexion (je ne l'ai pas été en mesure de vérifier d'autres sources de saisie semi-automatique) les observables pour Profile.Email et Profile.Password ne sont pas mis à jour. Si je clique dans la case et donne le focus sur le champ, puis quitte le champ, la valeur n'est toujours pas mise à jour. Ce n'est que lorsque j'ajoute ou supprime un caractère que le champ est mis à jour.

J'ai vu d'autres discussions ici sur la façon de "hack" a way around cela, mais ils sont tous pré-KO 3.2.0 qui comprenait la liaison textInput qui semble devoir régler ce problème, mais ce n'est pas le cas.

Y a-t-il une raison pour laquelle textInput ne met pas à jour la valeur observable sur autofill et existe-t-il de nouveaux moyens de mettre à jour la valeur qui ne sont pas si "hacky".

+0

Wew, vous avez une combinaison peu utilisée de pièces (norton + knock-out), votre question ne peut pas obtenir une réponse autant que les autres pourraient. Si vous n'obtenez pas de réponse, vous voudrez peut-être récupérer vous-même la source KO et la parcourir (si Norton enregistre même les entrées remplies) pour voir où se situe le problème. – Jeroen

Répondre

1

À moins que le déclencheur change() ne soit déclenché, Knockout ne verra pas la valeur d'entrée mise à jour. Voici une petite démo avec laquelle vous pouvez jouer. Si la case est cochée, le déclencheur change est déclenché après la mise à jour de la valeur et la valeur observable est alors modifiée.

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" />

Voir aussi: Update field with jquery don't update observable

+0

Cela a fonctionné pour moi, puisque j'avais seulement besoin de le vérifier lors de la connexion. Je viens d'ajouter '$ (" # signInPassword "). Change(); $ ("# signInEmailAddress"). change(); 'dans la fonction de soumission. Toujours trouver cela un peu hackish et pense que c'est un peu un bug mais probablement le meilleur que je vais avoir. Merci. – DasBeasto