我是jQuery的新手。我正在使用jQuery版本1.8.3。在我的ASP.NET Web应用程序中,我使用jQuery Validation引擎来验证日期。我正在动态创建HTML文本输入,允许用户仅以dd / mm / yyyy格式输入日期,在这里我将过去和未来的验证器分配给texbox。我希望以dd / mm / yyyy格式验证日期,方法是使用过去和将来的验证器,用户应该只允许输入过去和未来给定值之间的日期。如果用户输入超出给定限制的日期,它也应该以dd / mm / yyyy格式显示消息中的日期。
但是发生了什么;过去和将来的日期验证器仅在我以yyyy-mm-dd格式传递日期时才进行验证,我必须在yyyy-mm-dd格式的文本框中输入日期。
欢迎大家提出意见
我到现在为止尝试的内容如下:
HtmlGenericControl l_oHGC = new HtmlGenericControl("div");
divCustomFields.Controls.Add(l_oHGC);
TextBox l_oTXT = new TextBox();
l_oHGC.Controls.Add(l_oTXT);
l_oTXT.Text = Convert.ToDateTime("Apr 16 2014 12:00AM").ToString(gc.APP_DATEFORMAT_DD_MM_YYYY);
l_oTXT.MaxLength = 10;
l_oTXT.CssClass = "calender validate[custom[date],past[" + Convert.ToDateTime("Dec 31 2050 12:00AM").ToString(gc.APP_DATEFORMAT_DD_MM_YYYY) + "],future[" + Convert.ToDateTime("Apr 26 2014 12:00AM").ToString(gc.APP_DATEFORMAT_DD_MM_YYYY) + "]]";
在jquery.validationEngine-en.js中我做了以下更改
"past": {
"regex": /^(0?[1-9]|[12][0-9]|3[01])[\/\-](0?[1-9]|1[012])[\/\-]\d{4}$/,
"alertText": "* Date prior to "
},
"future": {
"regex": /^(0?[1-9]|[12][0-9]|3[01])[\/\-](0?[1-9]|1[012])[\/\-]\d{4}$/,
"alertText": "* Date past "
},
"date": {
"regex": /^(0?[1-9]|[12][0-9]|3[01])[\/\-](0?[1-9]|1[012])[\/\-]\d{4}$/,
"alertText": "* Invalid date, must be in DD/MM/YYYY format"
},
答案 0 :(得分:1)
简短回答是:当以自定义格式指定日期时,您无法执行past
和future
验证。开箱即用,它支持只有ISO格式的日期(YYYY-MM-DD或YYYY / MM / DD)。
坏消息是语言文件(jquery.validationEngine-en.js
)的更改不会影响这些验证的解析日期。
原因是ISO格式在jquery.validationEngine.js
的以下方法中是硬编码的:
/**
* Parses an ISO date
* @param {String} d
*/
_parseDate: function(d) {
var dateParts = d.split("-");
if(dateParts==d)
dateParts = d.split("/");
if(dateParts==d) {
dateParts = d.split(".");
return new Date(dateParts[2], (dateParts[1] - 1), dateParts[0]);
}
return new Date(dateParts[0], (dateParts[1] - 1) ,dateParts[2]);
},
因此,您必须使用YYYY/MM/DD
格式而不是所需的dd/mm/yyyy
,或者编写自己的解析方法而不是_parseDate
以满足您的需求。
如果你更喜欢第二种方式,那么这就是坏消息2:没有可用于通过你自己的JS覆盖这种行为的扩展点。因此,您需要直接修改jquery.validationEngine.js
,并确保在将来更新jQuery.validationEngine
插件时不会覆盖您的更改。