在jQuery的验证插件中指定'highlight'和'unhighlight'方法时如何避免代码重复?

时间:2018-04-19 20:10:30

标签: javascript jquery

考虑jQuery验证插件的这个应用程序:

(function($) {
  'use strict';
  $('form[data-behavior="validate"]').validate({
    errorElement: 'span',
    ignore: ':hidden, .select-dropdown',
    normalizer: function(value) {
      if (!value) value = '';

      if ($(this).is('[data-currency-mask]')) {
        return value.replace(/\$/g, '').replace(/,/g, '');
      }

      return value;
    },
    highlight: function(element) {
      $(element).addClass('invalid');
      $(element.form).find('label[for=' + element.id + ']').addClass('invalid');
    },
    unhighlight: function(element) {
      $(element).removeClass('invalid');
      $(element.form).find('label[for=' + element.id + ']').removeClass('invalid');
    }
  });
})(jQuery);

此自定义验证程序向元素及其标签添加/删除错误类"invalid"。结果如下(使用Materialize.css):

enter image description here

highlightunhighlight函数中有一些代码重复,我想消除它们;此外,我似乎可以使用errorClass属性(参见https://jqueryvalidation.org/validate/),而不是在任何地方使用硬编码'invalid'

我已尝试在传递给errorClass: 'invalid'的对象中设置.validate(),然后在errorClass和{{1}中使用'invalid'代替highlight方法,但这似乎不起作用。我该如何重构这段代码?

1 个答案:

答案 0 :(得分:0)

我没有足够的声誉来发表评论,因为人们不会激发我的答案或者获得声誉所需的一切。

但是,我注意到的第一件事是

if (!value) value = '';

应该是

if (!value) { value = ''; }

也可以用

初始化

value = value || '';

或者,根据您使用的ECMA脚本的版本,您甚至可以保存一行代码并在参数中初始化

normalizer: function(value = '')

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Default_parameters