0

我已经修改了 Stackoverflow 上的所有 Anytime datepicker Q/A 都无济于事。我如何更改选择器的日期,而不是在初始化阶段?

用例: 我有时希望用户选择一个日期,但有时也希望一个外部事件来触发和更新选择器的当前值。

4

1 回答 1

0

你想更新选择器的值(换句话说,突出显示哪些按钮),还是表单域的值?如果是后者,那么您可以使用典型的 JavaScript 命令将该字段设置为新值。下次用户点击该字段时,将根据该值设置选择器。

唯一需要注意的是,您设置的值必须与您为选择器指定的格式相同。如果您使用 JavaScriptDate对象,则可以使用使用AnyTime.Converter()相同格式字符串初始化的新对象将其转换为正确格式,并调用转换器的format()方法将您的Date转换为字符串。

例如:

var FMT = "%e-%b-%Y";
var conv = new AnyTime.Converter({format:FMT});
$("#field").AnyTime_picker({format:FMT});
...
var newVal = new Date(...);
$('#field').val( conv.format(newVal) );

如果您不使用 Date 对象,只需 100% 确定您正确格式化字符串!

现在,假设您实际上想要更改选择器显示的内容(例如,您有一个选择器,placement:'inline'并且您希望选择器反映字段中的新值):

在这种情况下,您必须在anytime.js 中移动一行代码,并在您的JavaScript 中再添加一行代码:

首先,在anytime.js 的第84 行附近,您应该找到:

var __pickers = [];

再高几行,您应该会发现:

(function($)

将第二行移到第一行的上方,最终得到:

var __pickers = [];
(function($)

然后,在您自己的代码中,将表单字段设置为新值后,调用__pickers[id].showPkr()作为表单字段的 ID。例如,继续我最早的示例,添加以下最后一行:

__pickers['field'].showPkr();

当然,既然您已经将 __pickers[] 公开为全局变量,请确保您没有在其他地方将相同的名称用于其他目的,否则名称会发生​​冲突。

于 2014-07-01T15:09:02.877 回答