asp.net jquery datepicker bug
Posted
技术标签:
【中文标题】asp.net jquery datepicker bug【英文标题】: 【发布时间】:2011-02-17 22:14:18 【问题描述】:我在 aspx 网络表单中也成功使用了带有屏蔽输入插件的 jquery datepicker。 我注意到一个错误:当我通过在日历上选择日期来插入日期,然后尝试手动修改它时,日期突然消失了。
你见过这种行为吗?
【问题讨论】:
你用的是什么蒙面插件? jquery.maskedinput-1.2.2.js - 这里是许可证链接:digitalbush.com/projects/masked-input-plugin/#license 【参考方案1】:使用Jquery 1.3.1
和UI 1.7.x
一切都很好,但是如果你使用1.4.2
和UI 1.8.x
你会遇到你描述的错误。
<html>
<head>
<title></title>
<!--<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js" type="text/javascript"></script>
<script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.1/jquery-ui.min.js" type="text/javascript"></script>
<link href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.1/themes/base/jquery-ui.css" type="text/css" rel="Stylesheet" />-->
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.1/jquery.min.js" type="text/javascript"></script>
<script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.7/jquery-ui.min.js" type="text/javascript"></script>
<link href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.7/themes/base/jquery-ui.css" type="text/css" rel="Stylesheet" />
<script type="text/javascript" src="http://jquery-joshbush.googlecode.com/files/jquery.maskedinput-1.2.2.min.js"></script>
<script type="text/javascript">
$(function()
$("#masktest").mask("99/99/9999");
$("#masktest").datepicker();
);
</script>
</head>
<body>
<p>Date: <input id="masktest" type="text" value="01/01/2010" /></p>
<p>Other field: <input id="other1" type="text" value="" /></p>
<p>Other field 2: <input id="other2" type="text" value="" /></p>
</body>
</html>
【讨论】:
我要试试你说的 jquery 版本。然后我检查你的答案。谢谢 谢谢爱德华多,它有效。我在 jquery dev 上打开了一个错误,即使他们告诉我这是一个被屏蔽的输入插件错误【参考方案2】:如果您使用部分日期掩码(2 位数年份),则不会遇到此问题。
但是使用完整的日期掩码(4 位数年份),会出现此问题,因为 Datepicker 将具有 2 位数年份的日期解析为有效日期并调用输入的 focus() 方法,这会导致掩码输入验证值针对完整的掩码,确定它是一个不完整的值并清除它。
要解决此问题,您需要手动更改 JUI Datepicker 的代码。
如果您使用的是 JUI 的缩小版,请搜索此子字符串:
else if(c
然后将其从代码中删除。
【讨论】:
嘿,我搜索了那个子字符串,但它不存在。你确定它在 jQuery UI Datepicker 1.8rc1 中吗? 它在 1.8.4 中,删除它确实可以解决问题【参考方案3】:我刚刚通过在 jQuery UI 日期选择器的 dateFormat 中添加一个尾随空格来解决这个问题。这可以防止编辑第三方库。为我出色地工作。
$("#StartDate").datepicker(
dateFormat: "mm/dd/yy ",
changeMonth: true,
changeYear: true,
showAnim: "fadeIn"
).mask("99/99/9999");
【讨论】:
【参考方案4】:marcos.pont,这是一个很好的 hack,但是:
如果您想在某处使用 2 位数年份,它将不起作用。
只有在您输入日期足够快时才有效。否则,在输入年份的第 3 位之后清除该字段(例如,您要输入 2010,在 '201' 之后该字段将清除)
这是一个更好的解决方案,虽然它也是一个 hack(两位或四位数的年份都适用,但您不能输入 3 位数的年份 (100-999)。因为大多数时候我们只需要 2 或 4 -数字年份功能,有一个修复:
在非缩小版中在 parseDate 函数中找到这段代码:
case 'y':
year = getNumber('y');
并添加
if(format.charAt(iFormat) == 'y' && year < 1000)return null;
在该代码和 break;
之间缩小版: 替换
case "y":c=m("y");break;
有
case "y":c=m("y");if(a.charAt(z)=='y'&&c<1000)return null;break;
【讨论】:
【参考方案5】:日期消失,因为当您键入月/年数字时输入字段失去焦点。 为了防止这种情况,您可以在 jquery.maskedinput.js 中更改焦点句柄:
.bind("focus.mask", function()
//add this condition
if ($(this).hasClass('hasDatepicker'))
return;
...
【讨论】:
以上是关于asp.net jquery datepicker bug的主要内容,如果未能解决你的问题,请参考以下文章
Gridview Jquery DatePicker中的Asp.Net UpdatePanel
jquery datepicker和asp.net c#空值
ASP.Net MVC jQuery UI DatePicker 日期格式