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.add($inputs);
  13. this._validateAll(true);
  14. this.$fields.find(this.opts.error).hide();
  15. this._inject('addRules');
  16. },
  17. getInvalid: function() {
  18. return this.$fields.filter(function() {
  19. return $(this).data('idealforms-valid') === false;
  20. });
  21. },
  22. focusFirstInvalid: function() {
  23. var firstInvalid = this._getFirstInvalid()[0];
  24. if (firstInvalid) {
  25. this._handleError(firstInvalid);
  26. this._handleStyle(firstInvalid);
  27. this._inject('focusFirstInvalid', firstInvalid);
  28. $(firstInvalid).focus();
  29. }
  30. },
  31. isValid: function(name) {
  32. if (name) return ! this.getInvalid().find('[name="'+ name +'"]').length;
  33. return ! this.getInvalid().length;
  34. },
  35. reset: function(name) {
  36. var self = this
  37. , $inputs = this.$inputs;
  38. if (name) $inputs = $inputs.filter('[name="'+ name +'"]');
  39. $inputs.filter('input:not(:checkbox, :radio), textarea').val('');
  40. $inputs.filter(':checkbox, :radio').prop('checked', false);
  41. $inputs.filter('select').find('option').prop('selected', function() {
  42. return this.defaultSelected;
  43. });
  44. $inputs.change().each(function(){ self._fresh(this) });
  45. this._inject('reset', name);
  46. }
  47. };