【问题标题】:Datepicker loses date value when dateFormat doesn't include day当 dateFormat 不包括日期时,Datepicker 会丢失日期值
【发布时间】:2013-01-25 18:04:48
【问题描述】:

我有两个 HTML 输入元素。第一个是显示所选月份和年份的只读文本输入,第二个是保存所选日期的隐藏输入:

<input type="text" id="MonthDisplay" readonly="readonly" />
<input type="hidden" name="Month" />

目标是在隐藏字段中存储选择的实际日期,但在可见的 MonthDisplay 字段中仅显示月份和年份。

这里是初始化日期选择器的代码:

$('#MonthDisplay')
    .datepicker({
        'dateFormat'  : 'MM yy',
        'changeMonth' : true,
        'changeYear'  : true,
        'yearRange'   : '2010:'+new Date().getFullYear(),
        'altField'    : "input[type=hidden][name=Month]",
        'altFormat'   : "m/d/yy"
    });

用户第一次选择日期时,一切正常。显示字段和隐藏字段都设置正确。但是用户第二次单击显示字段时,日期选择器不会默认为所选月份。相反,它默认为今天的月份。我很确定这是因为控件无法解析日期——当我将 dateFormat 设置为包含日期时(使用格式字符串"dd MM yy"),它工作得很好。但我不想在向用户显示的日期中包含这一天。

所以我的问题是,如何在第二次截取 datepicker 使用的日期时,该日期会记住上一个选择的月份?

或者,作为一个替代问题,有没有办法让日期选择器或其他控件只选择月份和年份而不选择日期?

【问题讨论】:

  • 你有没有解决过这个问题?如果是,请发布答案,我会给你赏金:)
  • 不幸的是,我无法让它工作。我最终改变了用户界面。
  • 我想这将是我的命运。 2 天的开放赏金,这个问题几乎没有 15 次浏览。
  • @gustavohenke 请参阅下面 makla 的评论;它可能会帮助你。

标签: jquery jquery-ui jquery-ui-datepicker


【解决方案1】:

我从@Muthukumar 提到的SO question 中得到了“记住”所选月份的示例(使用jQuery .data())。 JSFiddle here

HTML:

<label for="startDate">Date :</label>
<input name="startDate" id="startDate" class="date-picker" />

JS:

$(function() {
  $('.date-picker').datepicker( {
    changeMonth: true,
    changeYear: true,
    showButtonPanel: true,
    dateFormat: 'MM yy',
    beforeShow: function(elem, inst) {
      var $this = $(this);
      // set the datepicker date
      $this.datepicker('option', 'defaultDate', $this.data('date'));
      // set the input date
      $this.datepicker('setDate', $this.data('date'));
    },
    onClose: function(dateText, inst) { 
      var month = $("#ui-datepicker-div .ui-datepicker-month :selected").val();
      var year = $("#ui-datepicker-div .ui-datepicker-year :selected").val();
      var date = new Date(year, month, 2);
      $(this).datepicker('setDate', date)
             .data('date', date); // remember the selected date
    }
  });
});

但是,@CharlieKilian,我无法让您的代码使用只读输入。我将您的代码和 html(已注释)放入小提琴中,因此您可以根据需要使用它。

【讨论】:

  • 我已经修改了小提琴以使用只读输入运行并且它确实有效:P
  • @gustavohenke,你能把那个小提琴的链接加进去吗?
  • 我认为这是假设您只是使用英文版的日期选择器
【解决方案2】:

以下链接应该让您了解如何实施日期选择器以仅选择月份和年份而不选择日期。

jQuery UI DatePicker to show month year only

【讨论】:

  • 该示例与我遇到的问题相同。日期选择器有效,但在下拉菜单之间不会记住所选月份。
  • 我从那个 SO 问题中得到了“记住”所选月份的示例——jsfiddle here。但是,@CharlieKilian,我根本无法让您的代码使用只读输入。我将您的代码和 html(已注释)放入小提琴中,因此您可以根据需要使用它。
  • @makla 将其作为答案发布,赏金就是你的 :)
猜你喜欢
  • 2014-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-23
  • 2012-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多