在验证失败后如何在Knockout中进行ajax调用

本文关键字:ajax 调用 验证 失败 Knockout | 更新日期: 2023-09-27 18:13:40

我让knockout对这个输入进行验证。我认为。我无法设置任何中断,但它从$root.ValidationMessages.Object

发送静态文本

下面是输入元素

<input id="objectNumber" name="objectNumber" class="setsize ats-ccnumber valid" 
type="text" placeholder="Number" 
data-bind="value: PaymentOptions.Object.Number>

我想做的是在验证失败时发送一个异步ajax调用,传递输入ID和在文本因验证失败而被清除之前输入的无效文本。下面是validateObject

的KO处理程序
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

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);

}

我不知道这在哪里被验证。第一次接触淘汰赛。谁能解释发生了什么,如果可能的话,以及如何发送一个ajax调用后验证失败,但在字段被清除?

在验证失败后如何在Knockout中进行ajax调用

验证由JQuery验证完成。它完全独立于KnockoutJS,与之无关。

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

$("form").on("invalid-form", function (e) {
    console.log($(e.target).validate().errorList);
});

顺便说一下,如果可能的话,我建议你用Knockout Validation代替JQuery Validation。

使用Knockout-Validation插件将是比使用JQuery验证本身更好的选择。它支持使用AJAX调用进行远程验证。它还基于JQuery验证所以大多数验证规则都是一样的