public.js 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. /**
  2. * Public methods
  3. */
  4. module.exports = {
  5. addRules: function(rules) {
  6. var self = this;
  7. var $inputs = this.$form.find($.map(rules, function(_, name) {
  8. return '[name="'+ name +'"]';
  9. }).join(','));
  10. $.extend(this.opts.rules, rules);
  11. $inputs.each(function(){ self._buildField(this) });
  12. this.$inputs = this.$inputs
  13. .add($inputs)
  14. .each(function(){ self._validate(this, true) });
  15. this.$fields.find(this.opts.error).hide();
  16. this._inject('addRules');
  17. },
  18. getInvalid: function() {
  19. return this.$fields.filter(function() {
  20. return $(this).data('idealforms-valid') === false;
  21. });
  22. },
  23. focusFirstInvalid: function() {
  24. var firstInvalid = this._getFirstInvalid()[0];
  25. if (firstInvalid) {
  26. this._handleError(firstInvalid);
  27. this._handleStyle(firstInvalid);
  28. this._inject('focusFirstInvalid', firstInvalid);
  29. firstInvalid.focus();
  30. }
  31. },
  32. isValid: function(name) {
  33. if (name) return ! this.getInvalid().find('[name="'+ name +'"]').length;
  34. return ! this.getInvalid().length;
  35. },
  36. reset: function(name) {
  37. var self = this
  38. , $inputs = this.$inputs;
  39. if (name) $inputs = $inputs.filter('[name="'+ name +'"]');
  40. $inputs.filter('input:not(:checkbox, :radio)').val('');
  41. $inputs.filter(':checkbox, :radio').prop('checked', false);
  42. $inputs.filter('select').find('option').prop('selected', function() {
  43. return this.defaultSelected;
  44. });
  45. $inputs.change().each(function(){ self._resetErrorAndStyle(this) });
  46. }
  47. };