Jquery Datepicker Chrome

当使用jQuery UI Datepicker时,我们在Google Chrome中使用时遇到了一个问题:当我们inputdate高于12的date时,它不接受它作为有效date,这是因为chrome认为dateformat是mm / dd / YYYY。 我们尝试通过添加代码来尝试强制date设置为dd / mm / yyyy来解决此问题

$('.date').datepicker({ dateFormat: "dd/mm/yy" }); 

有什么办法来解决这个问题,所以我们的dateselect器将接受dd / mm / yyyy值? 我们只有谷歌浏览器中的这个问题,datefix适用于Firefox,即&safari。 我们在这个项目中使用ASPX&MVC3。

如果有人能解决我们的问题,这将是伟大的

谢谢

我有同样的问题,并与所有基于Webkit的Web浏览器有关。 如果您设置大写M文本框显示飞蛾与字母。 对我来说最好的解决scheme是从jquery.validate.js覆盖validationdate函数

创buildjquery.validate.date.js并确保它在jquery.validate.js之后被加载

将以下代码添加到jquery.validate.date.js

 $(function() { $.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)); } }; }); 

user1011138解决scheme不为我工作,因为.toLocaleDateString(value)不parsingvaluestring

这里的解决scheme我想出了=>在jquery.validate.jsfind这个函数的定义:“date:函数(值,元素)”和代替:

 // http://docs.jquery.com/Plugins/Validation/Methods/date date: function (value, element) { var d = value.split("/"); return this.optional(element) || !/Invalid|NaN/.test(new Date((/chrom(e|ium)/.test(navigator.userAgent.toLowerCase())) ? d[1] + "/" + d[0] + "/" + d[2] : value)); }, 

创build一个新的jquery.validate.date.js文件。

将以下代码粘贴到文件中。

  $(function () { $.validator.methods.date = function (value, element) { if ($.browser.webkit) { 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)); } }; }); 

现在确保这个文件在jquery.validate.js文件后被加载。

  $.validator.methods.date = function (value, element) { if ($.browser.webkit) { var d = value.split("/"); return this.optional(element) || !/Invalid|NaN/.test(new Date((/chrom(e|ium)/.test(navigator.userAgent.toLowerCase())) ? d[1] + "/" + d[0] + "/" + d[2] : value)); } else { return this.optional(element) || !/Invalid|NaN/.test(new Date(value)); } }; 

上述解决scheme没有工作,因为jQuery的浏览器检查已弃用抛出jquery.validate.min.js Uncaught TypeError: Cannot read property 'webkit' of undefined. Exception occurred when checking element DateOfBirth, check the 'date' jquery.validate.min.js Uncaught TypeError: Cannot read property 'webkit' of undefined. Exception occurred when checking element DateOfBirth, check the 'date'

在我的项目中,我使用了引导datetimepicker的 momentjs ,所以这个解决scheme很好用:

  $(function () { $.validator.methods.date = function (value, element) { return this.optional(element) || moment(value, 'DD/MM/YYYY').isValid(); }; }); 

在加载jquery.validate()之后调用它

您必须使用“en-GB”datevalidation来覆盖默认的“en-US”datevalidation。

  • 'en-US'=>'mm / dd / yy'
  • 'en-GB'=>'dd / mm / yy'

解:

在你的项目中添加一个“jquery.validate.date.js”文件,并把下面的代码放在里面:

 //To Fix jQuery date format 'en-GB' validation problem in Chrome $(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 date in valid format [dd/mm/yyyy]" ); }); 

并确保它在“jquery.validate.min.js”之后加载:

 <script type="text/javascript" src="/Scripts/jquery-3.1.0.min.js"></script> <script type="text/javascript" src="/Scripts/jquery.validate.min.js"></script> <script type="text/javascript" src="/Scripts/jquery.validate.date.js"></script>