BootstrapValidator 自定义表单校验
前台校验
/**
* callback
**/
inadvanceAmount: {
validators: {
notEmpty: {message: '预约金额不能为空'},
numeric: {message: '预约金额只能输入数字'},
callback: {
message: '',
callback: function(value, validator) {
if(CommnUtil.expandTenThousandTimes(value) < PemInadvanceSheetPage.productData.buyOrigin){
validator.updateMessage('inadvanceAmount','callback','预约金额小于当前产品起投金额');
return false;
}
if(CommnUtil.expandTenThousandTimes(value) > PemInadvanceSheetPage.productData.buyRate){
validator.updateMessage('inadvanceAmount','callback','预约金额不可超过可预约的金额');
return false;
}
return true;
}
}
}
},
updateMessage()
有时候,可能错误提醒不是固定的,比如上方例子,但callback又只能写一个,所以需要使用updateMessage 方法,官方api在这个方法,只是介绍了一下,没有例子,在实际使用中,发现这个方法是有问题的。具体什么问题,直接上代码
/**
* Update the error message
*
* @param {String|jQuery} field The field name or field element
* @param {String} validator The validator name
* @param {String} message The message
* @returns {BootstrapValidator}
*/
updateMessage: function(field, validator, message) {
var $fields = $([]);
switch (typeof field) {
case 'object':
$fields = field;
field = field.attr('data-bv-field');
break;
case 'string':
$fields = this.getFieldElements(field);
break;
default:
break;
}
$fields.each(function() {
/**官方原版**/
// $(this).data('bv.messages').find('.help-block[data-bv-validator="' + validator + '"][data-bv-for="' + field + '"]').html(message);
/**
* 因为项目里使用的验证提示在 $tips 层还有div样式,不是单纯的message内容,
* 所以需要继续向里找到显示message的div,然后再去updateMessage
*/
var $tips = $(this).data('bv.messages').find('.help-block[data-bv-validator="' + validator + '"][data-bv-for="' + field + '"]');
if($tips.find(".tip_message").html() != undefined){
$tips.find(".tip_message").html(message);
}else{
$tips.html(message);
}
});
},
后台交互(服务端)校验
orgQualificateCertNum: {
validators: {
remote: {
message: '资质证书编号已存在',
delay:2000, //这里特别要说明,必须要加此属性,否则用户输入一个字就会访问后台一次,会消耗大量的系统资源
url: DomainUrl("/pemCustomerProduct/checkQualificate"),
data: function (validator) {
return {
id: validator.getFieldElements('id').val(),
};
}
}
}
}