【发布时间】:2019-04-04 17:33:29
【问题描述】:
编辑:
我试过这个没有成功:
window.Parsley.addValidator('date', {
validateString: function(value, format) {
if (! value) {
return true;
}
var date = moment(value, format, true);
return date.isValid();
},
priority: 256,
messages: {
en: 'It must be a valid date with format %s',
it: 'Deve essere una data valida nel formato %s'
}
});
window.Parsley.addValidator('datebeforenow', {
validateString: function(value, format, parsleyField) {
console.log("value", value);
if (! value) {
return true;
}
var $elem = parsleyField.$element;
$elem.attr(parsleyField.options.namespace + 'date', format);
$elem.removeAttr(parsleyField.options.namespace + 'datebeforenow');
$elem.parsley().whenValidate().then(function () {
$elem.attr(parsleyField.options.namespace + 'datebeforenow', format);
$elem.parsley().reset();
var date = moment(value, format, true);
console.log("date", date);
return date.isBefore(moment());
}).always(function () {
$elem.attr(parsleyField.options.namespace + 'datebeforenow', format);
console.log("$elem", $elem)
});
},
priority: 255,
messages: {
en: "Date must be before now",
it: "Inserire una data precedente a quella attuale",
},
});
date 如果您输入无效日期,则可以正确显示消息,但如果您在当前日期之后输入有效日期,则不会显示任何消息。我还尝试将较低的优先级设置为date。
原始问题:
我已经创建了这个 Parsley 验证器:
window.Parsley.addValidator('date', {
validateString: function(value, format) {
if (! value) {
return true;
}
var date = moment(value, format, true);
return date.isValid();
},
priority: 256,
});
我还有另一个验证器:
window.Parsley.addValidator('datebeforenow', {
validateString: function(value, format) {
if (! value) {
return true;
}
var valid_date = Parsley._validatorRegistry.validators.date.validateString(value, format);
if (! valid_date) {
return true;
}
var date = moment(value, format, true);
return date.isBefore(moment());
},
priority: 256,
});
我希望Parsley._validatorRegistry.validators.date.validateString(value, format); 调用另一个验证器,并且该字段将显示date 验证器的错误消息,所以我不需要添加两个验证器。但是没有出现错误信息。
在另一个验证器中调用验证器的正确方法是什么?
【问题讨论】:
标签: javascript validation parsley.js