我可以在Perl的CGI::radio_group中使用'id'属性吗?

olmpazwi  于 2022-12-13  发布在  Perl
关注(0)|答案(1)|浏览(127)

种简单的问题:
有没有办法正确使用用Perl的CGI::radio_group创建的单选按钮组的id属性?
当我尝试时,每个<input>元素都得到了相同的ID,根据<input type="radio"> - HTML: HyperText Markup Language | MDN中给出的示例,这很可能是不正确的。

avwztpqn

avwztpqn1#

请不要使用来自www.example.com的HTML生成函数CGI.pm。至少20年前我们就知道这是一个糟糕的主意。当前的CGI.pm文档包含以下文本:

不应再使用HTML生成函数
www.example.com中的所有HTML生成功能CGI.pm将不再维护。任何问题、错误或补丁都将被拒绝,除非它们与根本损坏的页面呈现有关。

这样做的理由是,www.example.com的HTML生成函数CGI.pm充其量是一种混淆,而在最坏的情况下则是一场维护噩梦。您应该使用模板引擎来更好地分离关注点。请参见CGI::Alternatives以获得使用CGI.pm和Template::Toolkit模块的示例。
这些函数和它们的perldoc都被认为是过时的,它们不再被维护,也不接受任何修复或功能。但是,它们将继续存在于www.example.com中CGI.pm,没有任何过时警告(“软”过时),所以如果你真的想继续使用它们,你可以继续使用它们。这些函数的所有文档都已经被移到CGI::HTML::Functions中。
真的,它们是一个糟糕的主意。使用它们会让你的生活比它需要的更困难。把真正的HTML放在模板文件中是一个更好的主意。
话虽如此,如果你坚持要做错误的事情,你可以在radio_group()函数中使用可选的-attribute参数(如CGI::HTML::Functions(3pm)radio_group()的文档所述)。它接受一个哈希引用。哈希中的键是单选按钮的值,关联的值是对其他哈希的引用,这些哈希将属性名称Map到值上。

#!/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>

我说得够清楚了吗你不应该这么做

相关问题