La valeur d'entrée liée à Knockout.js n'est pas mise à jour lorsque j'utilise jquery .val ('xyz')

86

J'ai une entrée qui a une liaison knockout à la valeur.

Lorsque je mets à jour la valeur à l'aide de la méthode .val () de jquery, la valeur modifiée n'est pas reflétée dans le viewModel.

J'ai besoin d'utiliser jQuery pour définir cette valeur. Comment puis-je déclencher la mise à jour du viewModel?

nnpath
la source

Réponses:

142

.val()ne déclenche pas l'événement de modification. Alors, vous pouvez le faire. val("blah").change()pour que KO reprenne les modifications.

RP Niemeyer
la source
3
Et si vous n'avez pas de contrôle là-dessus val()? Existe-t-il un moyen pour jQuery d'écouter val()les éléments?
cherouvim
+1 J'ai essayé de comprendre pendant quelques heures pourquoi, lorsque je modifiais une valeur avec la fonction getElementById, mon viewmodel n'était pas mis à jour. Merci!
Samuel
1
Mais vraiment laisser KO faire toute la manipulation dom est une meilleure approche, à mon humble avis.
Tom
Assurez-vous également de vérifier votre data-binddéclaration. J'ai eu ce bug avant de réaliser qu'il devrait l'être data-bind="value:location"et PAS data-bind="value:location()"
jmb-mage
Merci. Cela fait le travail pour moi.
DriLLFreAK100