67 lines
1.5 KiB
JavaScript
67 lines
1.5 KiB
JavaScript
|
/**
|
||
|
* Public methods
|
||
|
*/
|
||
|
module.exports = {
|
||
|
|
||
|
addRules: function(rules) {
|
||
|
|
||
|
var self = this;
|
||
|
|
||
|
var $inputs = this.$form.find($.map(rules, function(_, name) {
|
||
|
return '[name="'+ name +'"]';
|
||
|
}).join(','));
|
||
|
|
||
|
$.extend(this.opts.rules, rules);
|
||
|
|
||
|
$inputs.each(function(){ self._buildField(this) });
|
||
|
|
||
|
this.$inputs = this.$inputs
|
||
|
.add($inputs)
|
||
|
.each(function(){ self._validate(this, true) });
|
||
|
|
||
|
this.$fields.find(this.opts.error).hide();
|
||
|
|
||
|
this._inject('addRules');
|
||
|
},
|
||
|
|
||
|
getInvalid: function() {
|
||
|
return this.$fields.filter(function() {
|
||
|
return $(this).data('idealforms-valid') === false;
|
||
|
});
|
||
|
},
|
||
|
|
||
|
focusFirstInvalid: function() {
|
||
|
|
||
|
var firstInvalid = this._getFirstInvalid()[0];
|
||
|
|
||
|
if (firstInvalid) {
|
||
|
this._handleError(firstInvalid);
|
||
|
this._handleStyle(firstInvalid);
|
||
|
this._inject('focusFirstInvalid', firstInvalid);
|
||
|
firstInvalid.focus();
|
||
|
}
|
||
|
},
|
||
|
|
||
|
isValid: function(name) {
|
||
|
if (name) return ! this.getInvalid().find('[name="'+ name +'"]').length;
|
||
|
return ! this.getInvalid().length;
|
||
|
},
|
||
|
|
||
|
reset: function(name) {
|
||
|
|
||
|
var self = this
|
||
|
, $inputs = this.$inputs;
|
||
|
|
||
|
if (name) $inputs = $inputs.filter('[name="'+ name +'"]');
|
||
|
|
||
|
$inputs.filter('input:not(:checkbox, :radio)').val('');
|
||
|
$inputs.filter(':checkbox, :radio').prop('checked', false);
|
||
|
$inputs.filter('select').find('option').prop('selected', function() {
|
||
|
return this.defaultSelected;
|
||
|
});
|
||
|
|
||
|
$inputs.change().each(function(){ self._resetErrorAndStyle(this) });
|
||
|
}
|
||
|
|
||
|
};
|