我正在尝试使用最简单的场景,在不同的浏览器中使用日期选择器。我怀疑我用错误的方式做了一件非常简单的事情,但经过大量的搜索,我仍然没有找到解决方案。下面是一些示例代码,它代表了我正在尝试的内容。
如果我使用Chrome (v12.0.742.122),并从选择器中选择一个日期,例如13/08/2011,jQuery验证逻辑将不允许页面提交,即使我已经明确指定格式为'dd/mm/yy‘。
如果我将格式更改为'dd/M/yy‘,并选择2011年8月13日这样的日期,它在Chrome中可以使用,但在IE (v8.0.7600.16385)中不会为我提交。在FireFox (v3.6.18)中,这两种格式都有效。
我需要什么验证脚本才能在Chrome中支持'dd/mm/yy‘的日期格式?
<html>
<head>
<link rel="stylesheet" type="text/css" href="jquery-ui.css" />
<script type="text/javascript" src="jquery-1.4.4.js"></script>
<script type="text/javascript" src="jquery.validate.js"></script>
<script type="text/javascript" src="jquery.validate.unobtrusive.js"></script>
<script type="text/javascript" src="jquery-ui.js"></script>
<script type="text/javascript">
$(document).ready(function () {
$('.date').datepicker({ dateFormat: 'dd/mm/yy' });
$.validator.addMethod("dateRule", function(value, element) {
return true;
},
"Error message");
});
</script>
</head>
<body>
<form>
Date: <input type="text" name="myDate" class="date dateRule" />
<input type="submit" />
</form>
</body>
</html>
发布于 2011-08-02 14:15:16
四个小时后,我终于偶然发现了answer。出于某些原因,Chrome似乎有一些固有的偏好,倾向于使用美国的日期格式,而IE和FireFox能够合理地使用操作系统上的区域设置。
jQuery.validator.methods["date"] = function (value, element) { return true; }
发布于 2012-11-23 20:02:28
您可以使用此处提供的Globalize.js插件:https://github.com/jquery/globalize
然后简单地在网站的主脚本文件中重新定义validate方法,如下所示(避免编辑jquery.validate.js库文件,因为您可能希望在将来更新它):
$.validator.methods.date = function (value, element) {
return this.optional(element) || Globalize.parseDate(value, "d/M/y", "en");
}
发布于 2013-04-04 20:45:11
我知道我来得有点晚,但这是我用来解决Chrome验证不接受英国格式日期的解决方案。一个简单的即插即用验证,它不依赖于任何插件或修改任何文件。它将接受介于1900年1月1日和2999年31月31日之间的任何日期,因此采用美国或英国格式。显然,有一些无效的日期会悄悄过去,但您可以根据自己的需要调整正则表达式。这满足了我的需求,因为它将用于网站的低流量区域,并进行服务器端验证。有问题的站点区域是用ASP.net MVC构建的。
jQuery.validator.methods.date = function(value, element) {
var dateRegex = /^(0?[1-9]\/|[12]\d\/|3[01]\/){2}(19|20)\d\d$/;
return this.optional(element) || dateRegex.test(value);
};
https://stackoverflow.com/questions/6906725
复制相似问题