【问题标题】:Can I use `id` attribute with Perl's `CGI::radio_group`?我可以在 Perl 的 `CGI::radio_group` 中使用 `id` 属性吗?
【发布时间】:2022-12-12 22:56:49
【问题描述】:

一种简单的问题:

有没有办法为使用 Perl 的 CGI::radio_group 创建的无线电组正确使用 id 属性?

当我尝试时,每个<input> 元素都有相同的 ID,根据 <input type="radio"> - HTML: HyperText Markup Language | MDN 中给出的示例,这很可能是不正确的。

【问题讨论】:

  • CGI.pm 中的 HTML 生成函数非常非常古老。它们来自 ID 还不是真正意义上的东西的时代。不幸的是,通过浏览代码看起来你想做的事情是不可能的。 HTML 生成的开发已经停止多年,文档强烈建议不要使用它。

标签: html perl cgi radio-group


【解决方案1】:

请不要使用 CGI.pm 的 HTML 生成函数。至少 20 年来,我们都知道它们是一个糟糕的想法。 current documentation for CGI.pm 包含以下文本:

不应再使用 HTML 生成函数

全部CGI.pm 中的 HTML 生成函数不再被维护。任何问题、错误或补丁都将被拒绝,除非它们涉及从根本上损坏的页面呈现。

这样做的基本原理是 CGI.pm 的 HTML 生成函数充其量是一种混淆,最坏的情况下是维护的噩梦。您应该使用模板引擎来更好地分离关注点。有关将 CGI.pm 与 Template::Toolkit 模块一起使用的示例,请参阅 CGI::Alternatives

这些函数和它们的 perldoc 被认为已弃用,不再维护它们,并且不会接受它们的任何修复或功能。但是,它们将继续存在于 CGI.pm 中而不会出现任何弃用警告(“软”弃用),因此如果您确实需要,您可以继续使用它们。这些功能的所有文档已移至CGI::HTML::Functions

真的,他们是个糟糕的主意。使用它们会让你的生活变得比它需要的更艰难。将真正的 HTML 放入模板文件中是一个更好的主意。

话虽如此,如果你坚持做错事,你可以使用可选的-attribute参数到radio_group()函数。它需要一个哈希引用。散列中的键是单选按钮的值,关联的值是对将属性名称映射到值的其他散列的引用。

#!/usr/bin/perl

use strict;
use warnings;
use feature 'say';

use CGI 'radio_group';

my @radios = qw[foo bar baz];
my %attributes = (
  foo => { id => 'FOO' },
  bar => { id => 'BAR' },
  baz => { id => 'BAZ' },
);

say radio_group(
  -name       => 'radio',
  -values     => @radios,
  -attributes => %attributes,
);

这会产生以下 HTML(稍微整理一下):

<label>
  <input type="radio" name="radio" value="foo" checked="checked"  id="FOO"/>foo
</label>
<label>
  <input type="radio" name="radio" value="bar"  id="BAR"/>bar
</label>
<label>
  <input type="radio" name="radio" value="baz"  id="BAZ"/>baz
</label>

我说得足够清楚你不应该这样做了吗?

【讨论】:

    猜你喜欢
    • 2010-10-24
    • 2011-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-22
    • 2020-05-07
    • 2011-10-27
    • 2014-02-21
    相关资源
    最近更新 更多