【问题标题】:asp.net jquery datepicker bugasp.net jquery datepicker bug
【发布时间】:2011-02-17 22:14:18
【问题描述】:

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

你见过这种行为吗?

【问题讨论】:

标签: asp.net jquery datepicker


【解决方案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;
       }
       ...
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-02-25
        • 2013-02-10
        • 1970-01-01
        • 1970-01-01
        • 2014-07-02
        • 2011-03-21
        • 2011-01-10
        • 1970-01-01
        相关资源
        最近更新 更多