如何正确覆盖JQuery函数

时间:2017-05-23 12:31:53

标签: javascript jquery

我需要覆盖jquery.validate.js中的date函数

// http://docs.jquery.com/Plugins/Validation/Methods/date
date: function (value, element) {
  return this.optional(element) || !/Invalid|NaN/.test(new 
  Date(value).toString());
}

为了处理IE日期,当它在我的本地机器上运行时,我的测试服务器上出现错误。

我创建了一个jquery.validate.custom.js,我复制并修改了该函数,假设它会覆盖它。这就是我所拥有的:

// http://docs.jquery.com/Plugins/Validation/Methods/date
date: function (value, element) {
  if ($.browser.webkit) {
    //ES - Chrome does not use the locale when new Date objects instantiated:
    var d = new Date();
    return this.optional(element) || !/Invalid|NaN/.test(new Date
           (d.toLocaleDateString(value)));
  }
  else {
     return this.optional(element) || !/Invalid|NaN/.test(new Date(value));
       }
  }

但是在Windows 2012 Server上的IE11中,它会抛出以下错误:

JavaScript critical error at line 2, column 16 in 
http://localhost:60306/Scripts/jquery.validate.custom.js\n\nSCRIPT1010: 
Expected identifier

在查看代码时,我可以清楚地看到它突出显示了开放式括号:

date: function (...

当我将鼠标移到它上面时,会显示Expected identifier

有什么想法吗?

感谢。

2 个答案:

答案 0 :(得分:2)

您可以在加载jquery.validate库后尝试调用validator.addMethod方法,如下所示:



$(function () {
    
    $.validator.addMethod(
        "date",
        function (value, element) {
            var bits = value.match(/([0-9]+)/gi), str;
            if (!bits)
                return this.optional(element) || false;
            str = bits[1] + '/' + bits[0] + '/' + bits[2];
            return this.optional(element) || !/Invalid|NaN/.test(new Date(str));
        },
        "Please enter a date in the format dd/mm/yyyy"
    );
});




答案 1 :(得分:0)

@ Mervan-Agency的答案应该可行,据我所知(我没有实际测试就提出了它),但我认为你也可以这样做:

$.validator.methods.date = function (value, element) {
  if ($.browser.webkit) {
    //ES - Chrome does not use the locale when new Date objects instantiated:
    var d = new Date();
    return this.optional(element) || !/Invalid|NaN/.test(new Date
           (d.toLocaleDateString(value)));
  } else {
     return this.optional(element) || !/Invalid|NaN/.test(new Date(value));
  }
}

您的代码存在的问题是您已复制并粘贴了一段JSON,这在原始上下文之外无效。