如何获取复选框的值并将其放入变量中以插入 DB?
$request->param(cb)
没有获得
复选框在 mason2 组件(.mc)中的值,复选框的值将传递给另一个组件。所以我必须找到一种方法来获取提交时的值
这里是代码
<input type="checkbox" name="cb" value="" onclick="$(this).attr('value', this.checked ? 1 : 0)">
简化代码:
<input type="checkbox" name="cb" value="1">
根据定义,当复选框被选中时,浏览器将发送值,如果未选中复选框,则不会发送任何内容。您想将“ nothing ”转换为“ 0 ”,因此只需在 Mason2 组件中执行以下操作:
has 'cb';
#... and where you need the 0/1 checkbox value simply use the $.cb
my $cb01 = $.cb ? 1 : 0;
因此,当单击复选框时,将得到 1,否则为 0。
Mason2 组件:cbf.mc
#checkbox 表单
<form action="cbs">
<input type="checkbox" name="cb" value="1">
<input type="submit">
</form>
Mason2 组件:cbs.mc
#checkbox 显示
<%class>
has 'cb';
</%class>
The checkbox value is: <% $.cb ? 1 : 0 %>
制作上述两个组件,并将浏览器指向:
http://url/path/to/cbf
你会得到一个简单的表格。现在不要选中或选中复选框(如您所愿)并按提交。该组件cbs.mc
将显示该值。选中后,如果不是“0”,您将得到“1”。
真的很简单。
或者,您尝试以下操作cbs.mc
<%class>
has 'cb' => (default => 0);
</%class>
The chebox value is: <% $.cb %>
更清晰并采用默认值。这两个例子都是可行的解决方案。
我有一个类似的问题,并在尝试解决它时偶然发现了这个线程。在我的场景中,我有几个具有相同值的复选框(想想数据库中的每行“是/否”)。我想出了一个简单易懂的解决方案。
假设我们的值将是“Y”(选中)或“N”(未选中)。
为每个订单项添加一个“N”隐藏字段。这可确保您收到每一行的值。然后,同名的复选框字段将告诉我们事物是否为“Y”。假设第二个和最后一个检查的 4 个元素是一个 qw(NNYNNY) 数组,你最终会得到什么。只需转换为字符串,将 'NY' 值交换为 'Y' 并转换回来。你会得到正确的 qw(NYNY)。
#HTML
%foreach ... {
<input type=hidden name=shouldwe value='N'><input type=checkbox name=shouldwe value='Y'>
%}
#Processing
$list = join('', @shouldwe);
$list =~ s/NY/Y/g;
@shouldwe = split(//, $list);
对于这样的任务,WWW::Mechanize 和 HTML::TokeParser 的组合是您的朋友。前者通过单击按钮、链接等帮助您导航,而后者对 HTML 进行切片和切块。
在这种情况下,您只需导航到页面,扫描数据中的“输入”标签(即“复选框”是“输入”的一种),然后测试每个输入以查看“名称”属性是否与您的匹配'在之后。找到正确的“输入”标签后,您只需获取“已检查”属性的值,然后您就可以使用您喜欢的。
例如:
use WWW::Mechanize;
use HTML::TokeParser;
my $checkbox_name = "cb";
my $url = 'http://some_url/';
my $page = WWW::Mechanize->new(autocheck =>1);
$page->get($url);
my $pagedata = HTML::TokeParser->new(\$page->{content});
while (my $token = $pagedata->get_tag("input")) {
my @tokenarray = @$token;
my $attr_ref = $tokenarray[1];
my %attr = %$attr_ref;
# dump the contents of the hash
foreach my $k (keys %attr) {
print "$k: $attr{$k}\n";
}
print "\n";
if ($attr{name} eq $checkbox_name) {
print "found it!\n";
print "status = ", $attr{checked}, "\n";
last;
}
}
在这个例子中,“导航”部分是微不足道的,你可能没有 WWW::Mechanize。但是,在某些情况下,您需要提交输入、单击按钮、使用链接等,因此它通常会派上用场。