【问题标题】:How to set date in jquery ui select inputs如何在 jquery ui 选择输入中设置日期
【发布时间】:2025-12-08 18:00:01
【问题描述】:

大家晚上好,我创建了一个 JQuery Ui 日期选择器数月和数年,代码如下:

  $.datepicker.setDefaults($.datepicker.regional["pt-BR"]);
  $(datePickerId).datepicker({
    changeMonth: true,
    changeYear: true,
    showButtonPanel:true,
    maxDate: "+3m",
    minDate: "-2y",
    onClose: function(dateText, inst) {
      $(this).prop('disabled', true);
      let month = $("#ui-datepicker-div .ui-datepicker-month :selected").val();
      let year = $("#ui-datepicker-div .ui-datepicker-year :selected").val();
      let givenDate = new Date(year, month, 1);
      $(this).datepicker('setDate', givenDate);
      //Do something with AJAX
    }
  });
  $(datePickerId).datepicker("setDate", "0")

我的问题是,当用户选择日期时,输入是这样的:

这张图片就是一个完美的例子,在这种情况下,用户选择了 8 月份,但是一旦他再次点击日期选择器,日期选择器就会选择默认日期,该日期设置为运行第一次(今天的月/年),当用户选择一个新的月/年时,我怎样才能让代码“记住”在 onClose 方法中选择的代码,然后正确显示?非常感谢您。

编辑以完全描述我真正想要做的事情:用户打开日历,它以实际的月份和年份开始,用户选择 2019 年 7 月,单击确定,向服务器发出 AJAX 请求以选择一些信息给定月份,用户再次单击日期选择器,日历显示,当发生这种情况时,月份和年份的输入(参见图片以供参考)应为 2019 年 7 月/2019 年(用户选择的最后一个月/年份)。

【问题讨论】:

  • 您在onClose 中使用givenDate 的目的是什么?这就是导致日期更改的原因onClose...
  • 这能回答你的问题吗? Jquery DatePicker Set default date
  • 您可以设置一个变量 onclick 或使用 localstorage,然后使用 if/else 来检查变量在初始加载时是否为空。
  • 我需要 givenDate 以便稍后使用用户关闭日期选择器的日期进行 AJAX 请求。
  • 您在 datePicker 代码中使用的 dataFormat 是什么 - 我没有看到任何内容?

标签: javascript jquery jquery-ui


【解决方案1】:

考虑以下示例。

$(function() {
  $("#myDate").datepicker({
    changeMonth: true,
    changeYear: true,
    dateFormat: "MM yy",
    showButtonPanel: true,
    maxDate: "+3m",
    minDate: "-2y",
    onClose: function(dateText, inst) {
      $(this).prop('disabled', true);
      var m = $("#ui-datepicker-div .ui-datepicker-month :selected").val();
      m = parseInt(m) + 1;
      m = (m < 10 ? "0" + m : m);
      var y = $("#ui-datepicker-div .ui-datepicker-year :selected").val();
      var dt = new Date(y + "-" + m + "-01T00:00:01");
      $(this).datepicker( "option", "defaultDate", dt ).datepicker("setDate", dt);
      //Do something with AJAX
      $(this).prop('disabled', false);
    }
  }).datepicker("setDate", "0");
});
.ui-datepicker .ui-datepicker-calendar,
.ui-datepicker .ui-datepicker-buttonpane .ui-datepicker-current {
  display: none;
}
<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
Date: <input type="text" id="myDate" />

除了setDate,您还必须重置defaultDate

【讨论】:

  • 您所做的不仅仅是在答案中重置defaultDate。您还修复了月份值的一个错误,我认为指出这一点很重要。
  • @HereticMonkey 因为我使用的Date 的格式才需要。如果我这样做了,new Date(y, m, 1);monthIndex 将是正确的。 developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
  • 我很清楚日期是如何构造的,谢谢。我不知道在 jQuery UI 日历的下拉列表中如何表示月份值。我认为保持该代码相同并且只引入必要的更改会更好,但这就是我。
最近更新 更多