65 lines
1.4 KiB
JavaScript
65 lines
1.4 KiB
JavaScript
|
|
function sxValidator(opts){
|
|
|
|
var self = this;
|
|
this.valid = false;
|
|
|
|
this.options = opts;
|
|
this.$form = typeof opts.$el == 'string' ? $(opts.$el) : opts.$el;
|
|
|
|
this.init = function(){
|
|
this.$form.submit(function(e){
|
|
if(self.valid){
|
|
//if(this.$form.hasClass('_preorder')) yandexReachGoal('zakazkorzina');
|
|
return true;
|
|
}
|
|
e.preventDefault();
|
|
self.validate();
|
|
});
|
|
|
|
this.$form.on('click keyup', '.input-error', function(){
|
|
self.removeError($(this));
|
|
});
|
|
|
|
}
|
|
|
|
this.validate = function(){
|
|
var flag = true;
|
|
this.$form.find('[data-format]').each(function(){
|
|
var $input = $(this);
|
|
var val = $input.val();
|
|
var re = new RegExp($input.data('format'));
|
|
if(re.test(val)) return;
|
|
var msg = $input.data('notice') ? $input.data('notice') : 'Это поле необходимо заполнить';
|
|
self.showError($input, msg);
|
|
flag = false;
|
|
return false;
|
|
});
|
|
|
|
if(flag){
|
|
this.valid = true;
|
|
this.$form.submit();
|
|
}
|
|
}
|
|
|
|
this.showError = function($el, msg){
|
|
$el.addClass('input-error').parents('.form-group').addClass('has-error');
|
|
$el.popover({
|
|
html:true,
|
|
content: msg,
|
|
placement: 'bottom'
|
|
});
|
|
$el.popover('show');
|
|
$el.focus();
|
|
}
|
|
|
|
this.removeError = function($el){
|
|
$el.removeClass('input-error').parents('.form-group').removeClass('has-error');
|
|
$el.popover('destroy');
|
|
}
|
|
|
|
var __construct = function(that) {
|
|
that.init();
|
|
}(this);
|
|
|
|
} |