Perl 复选框组子分组
Perl checkbox group subgroupings
我正在尝试在 Perl 中创建一个复选框组 sub-titles 划分某些复选框。所有复选框都是相关的,但它们位于我希望在用户选择时显示的子类别中。
my $grocery_list = $q->checkbox_group(
-name=>'grocery_list',
-values=>\@items,
-linebreak=>'true',
-labels=>\%items,
在上面的例子中,我可能让 'Milk' 和 'Cheese' 在 "DAIRY" 的子类别下,而 'Ham' 和 'Turkey' 在 "DAIRY" 的子类别下"MEATS" 的子类别。我已经有了一个包含我的值的复选框组,但我正在努力在复选框的子组之间创建那些子类别标题(DAIRY 和 MEATS)。理想情况下,子类别标题不会是复选框,而只是划分复选框。是否可以将这些细分放在一个复选框中,或者我是否必须制作多个复选框,然后将选中的项目合并到一个数组中?
请注意,CGI 不再被视为最佳实践。您应该阅读 CGI::Alternatives
以获得解释以及对替代模块的建议。
您需要 fieldset
和 legend
元素来执行您描述的操作。在没有任何额外的 CSS 的情况下,前者在它包含的输入组周围绘制一个框,而后者则标记该框。
不幸的是,checkbox_group
便捷方法不允许您在两个字段集之间细分其元素,因此您必须使用除值和标签之外的相同参数调用它两次。最好编写自己的辅助例程,直接调用 checkbox
以构建适当的分组。
基本思路如下。 CGI 方法没有什么神奇的——它们只是根据您传递的参数生成 HTML。
my %labels = (
milk => 'Milk',
cheese => 'Cheese',
ham => 'Ham',
turkey => 'Turkey',
);
my @dairy_items = qw/ milk cheese /;
my @meat_items = qw/ ham turkey /;
my $dairy = $q->checkbox_group(
-name => 'grocery_list',
-values => \@dairy_items,
-linebreak => 'true',
-labels => \%labels,
);
my $meat = $q->checkbox_group(
-name => 'grocery_list',
-values => \@meat_items,
-linebreak => 'true',
-labels => \%labels,
);
print
$q->start_form,
$q->fieldset(
$q->legend('Dairy'),
$dairy,
),
$q->fieldset(
$q->legend('Meat'),
$meat,
),
$q->end_form;
我正在尝试在 Perl 中创建一个复选框组 sub-titles 划分某些复选框。所有复选框都是相关的,但它们位于我希望在用户选择时显示的子类别中。
my $grocery_list = $q->checkbox_group(
-name=>'grocery_list',
-values=>\@items,
-linebreak=>'true',
-labels=>\%items,
在上面的例子中,我可能让 'Milk' 和 'Cheese' 在 "DAIRY" 的子类别下,而 'Ham' 和 'Turkey' 在 "DAIRY" 的子类别下"MEATS" 的子类别。我已经有了一个包含我的值的复选框组,但我正在努力在复选框的子组之间创建那些子类别标题(DAIRY 和 MEATS)。理想情况下,子类别标题不会是复选框,而只是划分复选框。是否可以将这些细分放在一个复选框中,或者我是否必须制作多个复选框,然后将选中的项目合并到一个数组中?
请注意,CGI 不再被视为最佳实践。您应该阅读 CGI::Alternatives
以获得解释以及对替代模块的建议。
您需要 fieldset
和 legend
元素来执行您描述的操作。在没有任何额外的 CSS 的情况下,前者在它包含的输入组周围绘制一个框,而后者则标记该框。
不幸的是,checkbox_group
便捷方法不允许您在两个字段集之间细分其元素,因此您必须使用除值和标签之外的相同参数调用它两次。最好编写自己的辅助例程,直接调用 checkbox
以构建适当的分组。
基本思路如下。 CGI 方法没有什么神奇的——它们只是根据您传递的参数生成 HTML。
my %labels = (
milk => 'Milk',
cheese => 'Cheese',
ham => 'Ham',
turkey => 'Turkey',
);
my @dairy_items = qw/ milk cheese /;
my @meat_items = qw/ ham turkey /;
my $dairy = $q->checkbox_group(
-name => 'grocery_list',
-values => \@dairy_items,
-linebreak => 'true',
-labels => \%labels,
);
my $meat = $q->checkbox_group(
-name => 'grocery_list',
-values => \@meat_items,
-linebreak => 'true',
-labels => \%labels,
);
print
$q->start_form,
$q->fieldset(
$q->legend('Dairy'),
$dairy,
),
$q->fieldset(
$q->legend('Meat'),
$meat,
),
$q->end_form;