在验证失败后如何在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调用后验证失败,但在字段被清除?
验证由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验证所以大多数验证规则都是一样的