首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Knockout-validation.js -使用jQuery设置必需的属性验证失败

Knockout-validation.js -使用jQuery设置必需的属性验证失败
EN

Stack Overflow用户
提问于 2013-07-12 04:46:48
回答 1查看 355关注 0票数 0

我在knockout.js中实现了一个相当常见的场景,即复制表单。用户填写“联系人”表单,他们可以通过单击复选框来选择在“帐单”表单上使用相同的值。它使用jQuery遍历contact表单,并将同名的账单表单输入设置为相同的值。

这是一个精简的that shows the problem;尝试填写联系人表单,然后单击“与联系人信息相同”复选框。账单表单将会填写,但当您单击“验证账单”按钮时,您将看到账单表单中的每个字段都未通过验证。如果在表单中手动键入值,则验证成功。

我的问题是,为什么knockout-validation在从contact表单复制后没有检测到账单表单中的值已被设置?复制后,尽管有值,但必填字段未通过验证。如何让knockout-validation检测到字段值已更改?

我的模型使用的是烘焙的淘汰验证规则:

代码语言:javascript
复制
self.errors = ko.validation.group(this, {
    deep: true,
    observable: false
});

self.firstName = ko.observable().extend({
    required: true
});

值是通过jQuery的val()设置的:

代码语言:javascript
复制
$(":input[name]", contactForm).each(function () {
    $("[name=" + $(this).attr("name") + "]", billingForm).val($(this).val());
});

测试验证的按钮很简单:

代码语言:javascript
复制
self.validateBilling = function () {
    self.errors.showAllMessages();
    if (self.errors().length == 0) {
        alert("No billing validation errors.");
    }
};
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-12 05:00:41

发现了问题;使用.val()设置输入值不会导致触发onchange()。在设置值时触发更改解决了这个问题。

代码语言:javascript
复制
    $.fn.changeVal = function (v) {
        return $(this).val(v).trigger("change");
    };

    $(":input[name]", contactForm).each(function () {
        $("[name=" + $(this).attr("name") + "]", billingForm).changeVal($(this).val());
    });

(Credit for above)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17603199

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档