ノックアウト js で、フォームを複製するかなり一般的なシナリオを実装しました。ユーザーが「連絡先」フォームに入力すると、チェックボックスをクリックして「請求」フォームで同じ値を使用するオプションが与えられます。これは、jQuery を使用して連絡先フォームを反復処理し、同じ名前の請求フォーム入力を同じ値に設定します。
これは、問題を示す簡素化されたフィドルです。お問い合わせフォームに入力してみて、[連絡先情報と同じ] チェックボックスをクリックしてください。請求フォームは入力されますが、[Validate Billing] ボタンをクリックすると、請求フォームの各フィールドが検証に失敗したことがわかります。フォームに手動で値を入力すると、検証は成功します。
私が持っている質問は、請求フォームの値が連絡先フォームからコピーされた後に設定されたことをノックアウト検証が検出しないのはなぜですか? コピー後、値があるにもかかわらず、必須フィールドの検証に失敗します。フィールド値が変更されたことをノックアウト検証で検出するにはどうすればよいですか?
私のモデルは、焼き付けられたノックアウト検証ルールを使用しています。
self.errors = ko.validation.group(this, {
deep: true,
observable: false
});
self.firstName = ko.observable().extend({
required: true
});
値は jQuery の val() を介して設定されます。
$(":input[name]", contactForm).each(function () {
$("[name=" + $(this).attr("name") + "]", billingForm).val($(this).val());
});
検証をテストするボタンは単純です。
self.validateBilling = function () {
self.errors.showAllMessages();
if (self.errors().length == 0) {
alert("No billing validation errors.");
}
};