Perl CGI 日期和时间选择器,自动填充当前日期和时间
Posted
技术标签:
【中文标题】Perl CGI 日期和时间选择器,自动填充当前日期和时间【英文标题】:Perl CGI Date and Time picker with auto populate with current date and time 【发布时间】:2017-01-22 18:58:16 【问题描述】:我已经使用 perl 创建了一个 CGI 表单,一切都很好,除了我很难找到一个解决方案,如何在为用户提供选项的同时获取当前时间和日期填写在表单中使用日期和时间选择器更改输入。这是我写的代码片段:
sub output_form
my ($q) = @_;
print $q->start_form(
-name => 'main',
-method => 'POST',
);
print $q->start_table;
print $q->Tr(
$q->td('Update#:'),
$q->td(
$q->textfield(-name => "update_num", -size => 02)
)
);
print $q->Tr(
$q->td('Date:'),
$q->td(
$q->textfield(-name => "date", -size => 50)
)
);
print $q->Tr(
$q->td('Time:'),
$q->td(
$q->textfield(-name => "time", -size => 50)
)
);
【问题讨论】:
metacpan.org/pod/distribution/CGI/lib/… 您在这里有效地提出了多个问题。 “如何在 html 页面中放置日期时间选择器?”,“如何从 CGI.pm 生成标记?” (见之前的评论和“不要”)。 “如何使用 Perl 找到当前日期和时间?”。您应该专注于更窄的问题。 对于日期选择器,您需要 javascript。我用过jQuery UI's datepicker,但可能还有很多其他的。 @ThisSuitIsBlackNot 我喜欢你的建议,你会如何将你建议的日期选择器添加到面向对象的 CGI 页面,比如我的页面? 创建一个单独的 JavaScript 文件,并使用<script>
标签将其包含在您的 HTML 中,例如<script src="foo.js"></script>
。正如 Quentin 所说,您不应该使用 CGI.pm 的 HTML 生成功能。对于一个简单的 HTML 表单,您甚至可能一开始就不需要生成 任何东西;只需使用静态 HTML 文件。如果你的 HTML 真的需要动态的,你应该使用像 Template Toolkit 这样的模板工具。
【参考方案1】:
将http://jqueryui.com/datepicker/ 添加到您的 html 页面。
print "<link rel='stylesheet' href='//code.jquery.com/ui/1.12.0/themes/base/jquery-ui.css'>";
print "<script src='//code.jquery.com/jquery-1.12.4.js'></script>";
print "<script src='//code.jquery.com/ui/1.12.0/jquery-ui.js'></script>";
...
然后将 ID 标签添加到您的文本字段。
print $q->Tr(
$q->td('Date:'),
$q->td(
$q->textfield(-name => "date", -size => 50, -id => "datepicker")
)
);
您可能还会发现 perl 僧侣对使用 javascript 和 perl 的此参考很有帮助:http://www.perlmonks.org/?node_id=1050387
这里是关于数据选择器主题的另一个对话。 jQuery date/time picker
【讨论】:
【参考方案2】:如果您知道您的用户将使用 Edge 或 Chrome 等现代浏览器,那么您可以使用 HTML5 date
输入。
<input type="date" value="2016-09-15">
这在受支持的浏览器上提供了一个不错的日期选择器,并在不支持的情况下降级为简单的文本输入。
您可以使用 CGI 的 HTML 创建函数来创建它。
$q->input(type => 'date', value => '2016-09-15');
但是正如其他人所指出的,我们知道 HTML 创建函数是一个愚蠢的想法至少 15 年。现在应该没有人使用它们。请改用templating engine。
至于获取日期。最简单的选择可能是使用Time::Piece。
use Time::Piece;
my $date = localtime;
say $q->input(type => 'date', value => $date->strftime('%Y-%m-%d'));
【讨论】:
以上是关于Perl CGI 日期和时间选择器,自动填充当前日期和时间的主要内容,如果未能解决你的问题,请参考以下文章