Guest User

Untitled

a guest
Aug 16th, 2018
109
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.94 KB | None | 0 0
  1. (function () {
  2.  
  3. var validate = false;
  4. var errors = {};
  5.  
  6. var methods = {
  7.  
  8. isvalid: function (params) {
  9. var result = [];
  10. $.each($('input[type=text], input[type=password], select ,textarea', this).filter(':visible'), function (i) {
  11. $(this).jval();
  12. result[i] = validate;
  13. });
  14.  
  15. if (result.indexOf(false) == -1) {
  16. return true;
  17. } else {
  18. return false;
  19. }
  20.  
  21. },
  22. destroy: function (params) {
  23.  
  24. // скрывать текст у метки
  25. if (!params.showText) { $('.info').text(''); }
  26. // скрывать стиль у поля
  27. if (!params.showBorder) { $('input[type=text], input[type=password]').removeClass('input-error').removeClass('input-correct'); }
  28.  
  29. errors = {};
  30. validate = false;
  31. $('.tooltip').remove();
  32.  
  33. },
  34. nulling: function (params) {
  35. errors[params.type] = [];
  36. $('.tooltip').remove();
  37. validate = false;
  38.  
  39. }
  40.  
  41. };
  42.  
  43. var types = {
  44.  
  45. Username: function (params) {
  46.  
  47. var __this = $(this);
  48.  
  49. if (__this.val().length < 5) {
  50. errors[params.type].push("Длина данного поля не может быть меньше 5 символов!");
  51. }
  52.  
  53. var regExp = new RegExp('^[a-zA-Z]+$');
  54. if (!regExp.test(__this.val())) {
  55. errors[params.type].push("Введеное значение не соответствует формату!");
  56. }
  57.  
  58. if (errors[params.type].length == 0) { validate = true; }
  59. addMark(__this, validate);
  60.  
  61. },
  62. Password: function (params) {
  63.  
  64. var __this = $(this);
  65.  
  66. if (__this.val().length < 5) {
  67. errors[params.type].push("Длина данного поля не может быть меньше 5 символов!");
  68. }
  69.  
  70. regExp = new RegExp('^[a-zA-Z0-9$]+$');
  71. if (!regExp.test(__this.val())) {
  72. errors[params.type].push("Введенный «Пароль» не соответствует формату и должен состоять только из цифр и латинских символов!");
  73. }
  74.  
  75. if (errors[params.type].length == 0) { validate = true; }
  76. addMark(__this, validate);
  77.  
  78. }
  79.  
  80. };
  81.  
  82.  
  83. function deleteMark(element) {
  84. var mark = $('#markFor__' + element.attr('id'));
  85. if (mark !== "undefined") {
  86. mark.remove();
  87. }
  88. }
  89.  
  90.  
  91. function addMark(element, validate) {
  92.  
  93. // Удаляем предыдущую метку
  94. deleteMark(element);
  95.  
  96. $('body').append('<span id="' + 'markFor__' + element.attr('id') + '" class = "info"></span>');
  97. var mark = $('#markFor__' + element.attr('id'));
  98. var pos = element.offset();
  99.  
  100. // задаем позицию для метки
  101. mark.css({ top: pos.top + element.height(), left: pos.left + element.outerWidth() - 25 });
  102.  
  103. if (validate) {
  104. element.removeClass('input-error').addClass('input-correct');
  105. mark.removeClass('span-error').addClass('span-correct').html('<img src="/Img/icons8-ok.png" />').show();
  106. } else {
  107. element.removeClass('input-correct').addClass('input-error');
  108. mark.removeClass('span-correct').addClass('span-error').html('<a class="errorInfo"><img src="/Img/icons8-help.png" /></a>').show();
  109.  
  110. // обработчик по наведению курсора на метку
  111. $('.errorInfo').on('mouseenter', function (event) {
  112. event.stopImmediatePropagation();
  113. $('body').append('<div class = "tooltip">' + errors[element.attr('data-jval')].join("<br />") + '</div>');
  114.  
  115. var mpos = mark.offset();
  116. $('.tooltip').css({
  117. top: mpos.top,
  118. left: mpos.left + 40
  119. });
  120.  
  121. $('.tooltip').stop().animate({
  122. display: "block",
  123. top: mpos.top - $('.tooltip').outerHeight() / 1.8,
  124. opacity: .8
  125. }, {
  126. queue: false,
  127. duration: 300
  128. });
  129.  
  130. event.preventDefault();
  131. });
  132.  
  133. // обработчик снятия курсора с метки
  134. $('.errorInfo').on('mouseleave', function (event) {
  135. event.stopImmediatePropagation();
  136. $('.tooltip').remove();
  137. event.preventDefault();
  138. });
  139.  
  140. }
  141.  
  142. }
  143.  
  144.  
  145. $.fn.jval = function (method) {
  146.  
  147. var type = this.attr('data-jval');
  148. if (types[type] && !method) {
  149. // Обнуляем переменные
  150. methods.nulling.apply(this, new Array({ type: type }));
  151. // если запрашиваемый тип существует, мы его вызываем
  152. // все параметры, кроме имени метода прийдут в метод
  153. // this так же перекочует в метод
  154. return types[type].apply(this, new Array({ type: type }));
  155. } else if (method) {
  156. // выполняем метод
  157. return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
  158. } else {
  159. // если ничего не получилось
  160. $.error('Для типа с именем ' + type + ' не существует правил валидации, либо переданный метод отсутствует.');
  161. }
  162.  
  163. };
  164.  
  165. })();
Add Comment
Please, Sign In to add comment