【问题标题】:populate jquery ui datepicker datefield from alternative field从替代字段填充 jquery ui datepicker datefield
【发布时间】:2016-03-04 15:11:40
【问题描述】:

我一直想知道你是怎么做到的。我将 datepicker 的替代字段的值保存到数据库(以 MySQL 日期格式)。如果我从数据库中得到它,我可以用它填充 altField。但是实际的 datepicker 字段仍然是空的。我必须从数据库中对其进行格式化并填充该字段。但是日期选择器不应该这样做吗?有可能吗?

//html
// {$dbDate.expires} = '2016-01-01'
// {$dbDate.expires_formatted} = '01.01.2016'
<input type="hidden" name="expires" value="{$dbDate.expires}">
<input type="text" class="datepicker"> //should display the value "01.01.2016"
<input type="text" class="datepicker" value="{$dbDate.expires_formatted}"> //this is what I currently do instead

//js
.datepicker({
    altField : $(document).find('input[name="expires"]'),
    altFormat : "yy-mm-dd"
 }, $.datepicker.regional['someRegional']);

https://jsfiddle.net/mkxcqub6/ - 这个小提琴展示了它应该如何工作。除了这里,您会看到问题是日期最初的格式不正确(因为来自 db 的格式与显示的格式不同)。日期选择器中选定的日期也是当前日期,而不是来自数据库的日期。

https://jsfiddle.net/mkxcqub6/1/ - 这个小提琴展示了我现在正在做的事情。我从数据库中以两种格式获取日期。 MySQL 可以处理它并采用用户定义的格式。这样,日期选择器也会显示选定的日期。

【问题讨论】:

  • 我认为您的意思是将'input[name="expires"]' 中的值读入setDatedefaultDate,这样当用户选择一个日期时,它就会从到期日期开始。还是我误解了目标?
  • 不完全是。如果您在日历中选择一个日期,该日期将以您在输入字段中选择的格式显示。但是,如果您将替代字段保存到数据库中,则您只有该格式的日期。现在,如果您从数据库中获取日期,您希望以正确的格式(不是保存到数据库的格式)显示输入字段中设置的日期

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


【解决方案1】:

我建议通过setDatedefaultDate 执行此操作。请参阅工作示例:https://jsfiddle.net/Twisty/ht87Lvqv/

HTML

<input type="hidden" name="expires" value="2012-06-01">
<label for="startDate">Date :</label>
<input class="date-picker" />

JQuery

$(function() {
  var $inp = $("input[name='expires']").val();
  var YY = parseInt($inp.substring(0, 4));
  var MM = parseInt($inp.substring(5, 7)) - 1;
  var DD = parseInt($inp.substring(9,11));
  var myDate = $inp != "" ? new Date(YY, MM, DD) : new Date();
  $('.date-picker').datepicker({
    dateFormat: 'yy-mm-dd',
    defaultDate: myDate
  }).datepicker("setDate", myDate);
});

请记住,Date 使用 0 - 11 个月的数组。

编辑

在您更新之后,仍然有点不清楚您想如何使用这些字段,但我希望这有助于使备用字​​段更加清晰:

https://jsfiddle.net/Twisty/ht87Lvqv/1/

HTML

Hidden: <input type="text" class="hidden" name="expires" value="2016-01-01">
Normal: <input type="text" class="datepicker" id="current">
Formatted: <input type="text" class="datepicker" id="formatted" value="01.01.2016">

JQuery

$(function() {
  var $inp = $("input[name='expires']").val();
  var YY = parseInt($inp.substring(0, 4));
  var MM = parseInt($inp.substring(5, 7)) - 1;
  var DD = parseInt($inp.substring(9,11));
  var myDate = $inp != "" ? new Date(YY, MM, DD) : new Date();
  $("#current").datepicker({
    dateFormat: 'yy-mm-dd',
    defaultDate: myDate,
    altField : $("#formatted"),
    altFormat : "dd.mm.yy"
  }).datepicker("setDate", myDate);
});

当您现在选择一个日期时,它会在#formatted 字段中放置一个交替格式的日期。我强烈建议您在字段中使用 ID。

【讨论】:

  • 是的。那是相当丑陋的。如果改变格式怎么办?或者根据用户的语言想象不同的显示格式。
  • 但是日期选择器已经知道你保存的格式和你想要显示的格式。它已经有改变格式的方法,所以在我看来,它也应该将 alt 字段转换回显示格式。但这似乎是不可能的。所以我想知道为什么这看起来像是正常的用例,或者我做错了什么。但是,alt 字段还有什么用途呢?
  • @4485670 您可以在函数之外创建 dateFormat 字符串。我想我明白你在说什么,你希望一个字段在哪里显示特定格式,然后是数据库的另一个字段,对吗?
  • 是的,正常的字段格式是在页面上显示的。 alt-Field 格式保存到 db。
  • @4485670 你能做一个jsfiddle的例子吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多