首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >验证失败后,如何在Knockout中进行ajax调用?

问验证失败后,如何在Knockout中进行ajax调用?
EN

Stack Overflow用户
提问于 2014-07-19 02:20:37
回答 2查看 280关注 0票数 0

我已经对这个输入进行了验证。我认为。我无法设置任何中断,但它从$root.ValidationMessages.Object发送静态文本

下面是输入元素。

代码语言:javascript
复制
<input id="objectNumber" name="objectNumber" class="setsize ats-ccnumber valid" 
type="text" placeholder="Number" 
data-bind="value: PaymentOptions.Object.Number>

我想要做的是,当验证失败时,以某种方式发送一个异步ajax调用,传递输入ID和由于验证失败而被删除之前输入的无效文本。这里是validateObject的KO处理程序

代码语言:javascript
复制
ko.bindingHandlers.validateObject = {
'init': function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {
    var value = valueAccessor();
    var message = value;
    var when = function () { return true; };

    if (value != null && typeof value == "object") {
        if (value.when != null) {
            when = function () {
                if (typeof value.when == 'function') return value.when();
                return value.when;
            };
        }
        message = value.message;
    }
    addObjectValidation(when, getValueFor(message), element);
},
'update': function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {
}

};

这是addObjectValidation Javascript

代码语言:javascript
复制
function addObjectNumValidation(callback, message, element) {
$(element).rules("add", { required: function (x) { return !$(x).attr('disabled') && callback(); }, number2 : function () { return { objectType: $('#objectType').val(), required: !$(x).attr('disabled') && callback() }; }, messages: { required: message, creditcard2: message} });
var messages = $.data(element, 'validationMessages') || [];
messages.push(message);
$.data(element, 'validationMessages', messages);

}

我看不出这在哪里被证实了。第一次接触Knockout。如果可能的话,有人能解释一下发生了什么吗?在验证失败之后,但是在字段被清除之前,如何发送ajax调用?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-07-20 16:25:20

验证是通过JQuery验证完成的。它完全独立于KnockoutJS,与之无关。

若要每次验证表单时获得验证失败,请侦听invalid-form事件,然后访问JQuery验证的errorList成员

代码语言:javascript
复制
$("form").on("invalid-form", function (e) {
    console.log($(e.target).validate().errorList);
});

顺便说一句,如果可能的话,我建议您将JQuery验证替换为Knockout验证。

票数 0
EN

Stack Overflow用户

发布于 2014-07-21 04:23:46

使用敲除-验证插件比使用JQuery验证本身要好得多。它支持使用AJAX调用进行远程验证。它还基于JQuery验证,因此大多数验证规则是相同的。

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

https://stackoverflow.com/questions/24836144

复制
相关文章

相似问题

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