2

我们有一个日期字段,我们接受月份和年份。然而,每当用户选择该字段时,jQuery UI Datepicker 默认为当前月份和年份,并清除他们输入的任何内容。

我已将测试用例中的格式切换为 mm/dd/yy 并且 Datepicker 行为正确,因此我相当有信心基本代码是正确的。

关于如何解决这个问题的任何建议?

下面的示例代码:

<html>
<head></head>
<body>
    <script type="text/javascript" src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.7.2.min.js"></script>
    <script type="text/javascript" src="http://ajax.aspnetcdn.com/ajax/jquery.ui/1.8.22/jquery-ui.min.js"></script>
    <input type="text" id="asdf" value="07/2006" />
    <script type="text/javascript">
        $('#asdf').datepicker({
            changeMonth: true,
            changeYear: true,
            dateFormat: 'mm/yy',
            showButtonPanel: true
        });
    </script>
</body>
</html>

编辑:为了更清楚一点,在以下情况下比较 Datepicker 的日期,我们在输入值中提供一天,并更改dateFormat选项:

<html>
<head></head>
<body>
    <script type="text/javascript" src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.7.2.min.js"></script>
    <script type="text/javascript" src="http://ajax.aspnetcdn.com/ajax/jquery.ui/1.8.22/jquery-ui.min.js"></script>
    <input type="text" id="asdf" value="07/01/2006" />
    <script type="text/javascript">
        $('#asdf').datepicker({
            changeMonth: true,
            changeYear: true,
            dateFormat: 'mm/dd/yy',
            showButtonPanel: true
        });
    </script>
</body>
</html>
4

2 回答 2

2

我以为我第一次就理解了你的问题,但另一个人让我感到困惑。问题似乎是 datepicker 没有将 mm/yy 格式视为真正的日期时间格式,因此在尝试查找当前日期时会感到困惑,这意味着您必须做一些时髦的事情作为解决方法。我并不是说这是最好的方法,但这是我已经解决的问题。

请注意,这使用 Date.js

$('#asdf').datepicker({ changeMonth: true, changeYear: true, dateFormat: 'mm/yy',beforeShow: function(input, inst) 
{   //getter
    var defaultDate = $( "#asdf" ).datepicker( "option", "defaultDate" );
    //setter
    $( "#asdf" ).datepicker( "option", "defaultDate",   Date.parseExact($("#asdf").val(), "M/yyyy"));
}  });
于 2012-07-31T19:16:39.813 回答
0

看起来它不会将月份或年份的更改视为“选择”操作,但是当您单击一天时确实会更改月份/年份。换句话说,如果您更改了月份和年份,但没有单击某天,则认为您取消了操作。

onChangeMonthYear您可以尝试为事件 ( docs )编写一些代码来读取选定的月份/年份并自己关闭日历对话框。

于 2012-07-31T19:06:46.570 回答