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.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>

【讨论】:

我要试试你说的 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 jquery datepicker bug

ASP.Net MVC jQuery UI DatePicker 日期格式

jQuery datepicker 没有出现在 asp.net 文本框控制器中

JQuery Datepicker 未在 ASP.NET MVC 中显示