sip*_*wiz 53 jquery jquery-ui datepicker jquery-validate unobtrusive-validation
我正在尝试使用不同浏览器中使用日期选择器的最简单方案.我怀疑我做的事情非常简单,但是经过大量的搜索,我仍然没有找到解决方案.下面是一些代表我正在尝试的示例代码.
如果我使用Chrome(v12.0.742.122)并从选择器中选择日期,例如13/08/2011,即使我已明确指定格式为'dd/mm /,jQuery验证逻辑也不允许页面提交YY".
如果我将格式更改为'dd/M/yy'并选择类似13/Aug/2011的日期,则可以在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>
Run Code Online (Sandbox Code Playgroud)
sip*_*wiz 49
四个小时后,我终于偶然发现了答案.出于某种原因,Chrome似乎有一些内置的偏好使用美国日期格式,其中IE和FireFox能够合理并使用操作系统上的区域设置.
jQuery.validator.methods["date"] = function (value, element) { return true; }
Run Code Online (Sandbox Code Playgroud)
mag*_*tte 49
您可以使用此处提供的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");
}
Run Code Online (Sandbox Code Playgroud)
小智 22
我知道我参加聚会有点晚了,但这是我用来验证Chrome验证不接受英国格式约会的解决方案.一个简单的即插即用验证,它不依赖于任何插件或修改任何文件.它将接受19/1/19和31/31/2999之间的任何日期,所以美国或英国格式.显然有无效的日期将会过去,但你可以调整正则表达式的内容.这符合我的需求,因为它将用于站点的低流量区域,并具有服务器端验证.有问题的网站区域是使用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);
};
Run Code Online (Sandbox Code Playgroud)
mez*_*oid 18
看起来这个问题已经与JQuery团队一起提出.
https://github.com/jzaefferer/jquery-validation/issues/153
看起来现在的解决方法是在additional-methods.js中使用dateITA
它看起来像这样:
jQuery.validator.addMethod(
"dateITA",
function(value, element) {
var check = false;
var re = /^\d{1,2}\/\d{1,2}\/\d{4}$/;
if( re.test(value)){
var adata = value.split('/');
var gg = parseInt(adata[0],10);
var mm = parseInt(adata[1],10);
var aaaa = parseInt(adata[2],10);
var xdata = new Date(aaaa,mm-1,gg);
if ( ( xdata.getFullYear() == aaaa )
&& ( xdata.getMonth () == mm - 1 )
&& ( xdata.getDate() == gg ) )
check = true;
else
check = false;
} else
check = false;
return this.optional(element) || check;
},
"Please enter a correct date"
);
Run Code Online (Sandbox Code Playgroud)
如果添加该验证器,则可以将日期选择器附加到".dateITA"类.
到目前为止,这对我来说非常有效,让我超越Chrome中的这个愚蠢问题.
| 归档时间: |
|
| 查看次数: |
43495 次 |
| 最近记录: |