asp.net jquery datepicker错误

时间:2010-05-10 23:32:41

标签: asp.net jquery datepicker

我在aspx webform中成功使用了带有屏蔽输入插件的jquery datepicker。 我注意到了一个错误:当我通过在日历上选择日期来插入日期然后我尝试手动修改它时,日期会突然消失。

你见过这种行为吗?

5 个答案:

答案 0 :(得分:1)

使用Jquery 1.3.1UI 1.7.x一切都很好,但如果您使用1.4.2UI 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>

答案 1 :(得分:1)

如果您使用的是部分日期掩码(年份为2位数),则不会遇到此问题。

但是使用完整日期掩码(4位数年份),会出现此问题,因为Datepicker会将具有2位数年份的日期解析为有效日期并调用输入的focus()方法,这会导致屏蔽输入验证值反对完整掩码,确定它是一个不完整的值并清除它。

要解决此问题,您需要手动更改JUI Datepicker的代码。

如果您使用的是缩小版JUI,请搜索此子字符串:

否则if(c <100)c + =(new Date).getFullYear() - (new Date).getFullYear()%100 +(c&lt; = e?0:-100);

然后从代码中删除它。

答案 2 :(得分:1)

我刚刚通过在jQuery UI datepicker的日期格式中添加一个尾随空格来解决这个问题。这使得人们无法编辑第三方库。为我工作出色。

$("#StartDate").datepicker({
  dateFormat: "mm/dd/yy ",
  changeMonth: true,
  changeYear: true,
  showAnim: "fadeIn"
}).mask("99/99/9999");

答案 3 :(得分:1)

marcos.pont,这是一个很好的黑客但是:

如果你想在某个地方使用2位数年份,它将无效。

仅当您足够快地输入日期时才有效。否则,它会在输入年份的第3个数字后清除该字段(例如,您要输入2010,并且在'201'之后该字段将清除)

这是一个更好的解决方案,虽然它也是一个黑客(两个或四个数字的年份都适用,但你不能输入3位数年份(100-999)。因为大多数时候我们只需要2-或4 -digit ye​​ar功能,有一个修复:

在非缩小版中,在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;

答案 4 :(得分:0)

日期消失,因为输入字段在键入月/年数字时失去焦点。 要防止这种情况,您可以在jquery.maskedinput.js中更改焦点句柄:

.bind("focus.mask", function() {
 //add this condition 
 if ($(this).hasClass('hasDatepicker')) {
  return;
 }
 ...
}